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

标签 c# forms click

我想在用户单击 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/

相关文章:

forms - 使用原型(prototype)更改表单操作

html - 使用 WebDriver 单击 <div class > 链接

javascript - 显示/隐藏 DIV 元素 Javascript 时出现多次不必要的点击

c# - 如何将 FirstOrDefault 替换为 RandomOrDefault 之类的 "balance"调用?

javascript - 如何仅使用 javascript 和 css 隐藏和显示表单内部的 div

jquery - 提交常规表单之前的 AJAX 请求

javascript - 单击页面加载触发器 (UL > LI)

c# - 如何返回依赖于 using 语句链的对象?

c# - DbContext.Find() 和 DbContext.SingleOrDefault() Entity Framework Core 之间的区别

c# - 调用 LINQ First() 方法时出现 InvalidArgument 错误