在c#中检测点击脱离控件
Detect click out of the control in c#
首先,我想为您描述一下我的问题。
我想在组合框之类的东西中显示大量记录,但由于组合框不是显示如此大量数据的好解决方案,因此我使用 DataGridView 模拟组合框行为。
现在我的问题是当用户点击 DataGridView 时,DataGridView 应该关闭(就像没有折叠或放下时的组合框)。但是表单上有很多其他控件,我无法处理所有控件的单击事件以检测是否已单击 DataGridView。
总而言之,如果用户点击不可见的 DataGridView,我会寻找一个简单的解决方案。
最后,我对控件的 MouseCapture 属性 有了模糊的认识,但我无法使用它,我不知道如何使用它来处理我的 desire.I,非常感谢你,如果你可以帮助我使用 MouseCapture 解决此问题或提供其他解决方案。
谢谢你
自定义控件应该使这相当简单,特别是如果这是一个顶级控件(即直接在您的主 window 中)。您可以侦听父对象上的点击事件并使用 ClientRectangle
属性 来确定点击是否在 DataGridView
.
之外
这是一个基本示例:
class MyDataGridView : DataGridView, IMessageFilter {
public MyDataGridView() {
Application.AddMessageFilter(this);
this.HandleDestroyed += (sender, args) => Application.RemoveMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x201) {
if (!ClientRectangle.Contains(PointToClient(Control.MousePosition))) {
Hide();
}
}
return false;
}
}
首先,我想为您描述一下我的问题。
我想在组合框之类的东西中显示大量记录,但由于组合框不是显示如此大量数据的好解决方案,因此我使用 DataGridView 模拟组合框行为。
现在我的问题是当用户点击 DataGridView 时,DataGridView 应该关闭(就像没有折叠或放下时的组合框)。但是表单上有很多其他控件,我无法处理所有控件的单击事件以检测是否已单击 DataGridView。
总而言之,如果用户点击不可见的 DataGridView,我会寻找一个简单的解决方案。
最后,我对控件的 MouseCapture 属性 有了模糊的认识,但我无法使用它,我不知道如何使用它来处理我的 desire.I,非常感谢你,如果你可以帮助我使用 MouseCapture 解决此问题或提供其他解决方案。
谢谢你
自定义控件应该使这相当简单,特别是如果这是一个顶级控件(即直接在您的主 window 中)。您可以侦听父对象上的点击事件并使用 ClientRectangle
属性 来确定点击是否在 DataGridView
.
这是一个基本示例:
class MyDataGridView : DataGridView, IMessageFilter {
public MyDataGridView() {
Application.AddMessageFilter(this);
this.HandleDestroyed += (sender, args) => Application.RemoveMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == 0x201) {
if (!ClientRectangle.Contains(PointToClient(Control.MousePosition))) {
Hide();
}
}
return false;
}
}