ham*_*med 5 c# combobox datagridview winforms c#-3.0
首先,我想为您描述我的问题。
我想在诸如combobox之类的示例中显示大量记录,但是由于combobox并不是显示大量数据的好方法,因此我使用DataGridView模拟了combobox的行为。
现在我的问题是,当用户从DataGridView中单击时,应关闭DataGridView(如组合框未折叠或掉落时)。但是窗体上还有许多其他控件,我无法处理所有这些控件的click事件,以检测出DataGridView中是否已单击。
总结一下,如果用户单击该按钮,我将为隐形DataGridView寻找一个简单的解决方案。
最后我知道控件的MouseCapture属性含糊不清,但是我不能使用它,也不知道如何使用它来满足我的愿望。如果您能帮助我使用MouseCapture解决此问题,提供另一种解决方案。
谢谢你
自定义控件应该使这变得相当简单,特别是如果这是一个顶级控件(即直接在主窗口中)。您可以侦听父对象上的单击事件,并使用该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;
}
}
Run Code Online (Sandbox Code Playgroud)