首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中检测超出控件的单击

在c#中检测超出控件的单击
EN

Stack Overflow用户
提问于 2017-01-10 04:29:24
回答 1查看 896关注 0票数 5

首先,我想向你们描述一下我的问题。

我想在像combobox这样的东西中显示大量的记录,但是因为combobox不是一个很好的解决方案来显示如此大量的数据,所以我用DataGridView模拟了combobox的行为。

现在我的问题是,当用户在DataGridView之外单击时,DataGridView应该关闭(就像没有折叠或放下的组合框一样)。但表单上还有很多其他控件,我无法处理所有控件的单击事件来检测out of DataGridView是否已被单击。

综上所述,我寻找一个简单的解决方案来解决不可见的DataGridView,如果用户点击出来。

最后,我知道对控件的MouseCapture属性有一个模糊的认识,但我不能使用它,我不知道如何使用它来处理我的愿望。如果您能帮助我使用MouseCapture解决这个问题或给出另一个解决方案,我将不胜感激。

谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 06:27:33

自定义控件应该让这件事变得相当简单,特别是如果这是一个顶级控件(即直接在你的主窗口中)。您可以侦听父对象上的单击事件,并使用ClientRectangle属性确定单击是否在DataGridView之外。

下面是一个基本的例子:

代码语言:javascript
复制
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;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41556395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档