gpt4 book ai didi

c# - 当用户在窗体窗口外单击时如何关闭窗体?

转载 作者:太空狗 更新时间:2023-10-29 20:58:04 31 4
gpt4 key购买 nike

我想在用户单击 System.Windows.Forms.Form 之外的任何地方时关闭它。我试过使用 IMessageFilter,但即便如此,也没有任何消息传递给 PreFilterMessage。如何在表单窗口外接收点击?

最佳答案

在表单的停用事件中,放置“this.Close()”。单击 Windows 中的任何其他位置后,您的表单将立即关闭。

更新:我想你现在拥有的是一个音量按钮,在 Click 事件中你创建了一个 VolumeSlider 表单的实例并通过调用 ShowDialog() 使其出现,它会阻塞直到用户关闭弹出的表单.在下一行中,您读取用户选择的卷并将其用于您的程序。

这没问题,但正如您所注意到的那样,它会强制用户明确关闭弹出窗口以返回到主程序。 Show() 是您真正想在弹出窗体上使用的方法,但 Show() 不会阻塞,这意味着主窗体上的 Click 事件在不知道新音量应该是什么的情况下完成。

一个简单的解决方案是在您的主窗体上创建一个公共(public)方法,如下所示:

public void SetVolume(int volume)
{
// do something with the volume - whatever you did before with it
}

然后,在您的“音量”按钮的 Click 事件中(也在主窗体上),您使 VolumeSlider 看起来像这样:

VolumeSlider slider = new VolumeSlider();
slider.Show(this); // the "this" is needed for the next step

在 VolumeSlider 表单中,当用户操作(我猜)滚动条时,您将这段代码放在滚动条的 ValueChanged 事件中(我认为就是这样):

MainForm owner = (MainForm)this.Owner;
owner.SetVolume(scrollbar.Value);

然后在 VolumeSlider 表单的 Deactivate 事件中,您将如上所述放置 this.Close()。然后您的表单将按预期运行。

关于c# - 当用户在窗体窗口外单击时如何关闭窗体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298491/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com