首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何识别用户是否更改了控件的可见性?

如何识别用户是否更改了控件的可见性?
EN

Stack Overflow用户
提问于 2014-12-22 04:18:34
回答 1查看 1.6K关注 0票数 0

我的用户控件继承了System.Windows.Forms.Control类。下面的链接描述控件Control.Visible的“可见”属性

按照上面的链接,如果非活动选项卡中存在控件,那么Control.Visible将返回false,即使我们没有以编程方式设置它。

问题:如何识别可见性是否被用户或其他控件禁用?

注意:我试图重写ContorlVisible属性,但它不是可重写的。

解释

如果我的控件存在于未选中的选项卡中,则Control.Visible返回false。如果用户想要在Bitmap或其他东西中绘制控件(导出),我也需要确定子控件的可见性。由于我的控件不可见,因此无法可靠地确定子控件的可见性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-24 08:38:02

windows窗体中的所有控件都在内部维护其状态。能见度也是他们所保持的状态之一。因为它有助于确定为何更改控件的可见性。

如果控件上方有控件或隐藏了控件的父控件,则Control.Visible将返回false。但是,只有当用户将其设置为false时,状态下可见属性的值才为false。

代码:

代码语言:javascript
运行
复制
        //Method to ensure the visibility of a control
        public bool DetermineVisibility(Control control)
        {
            //Avoid reflection if control is visible
            if (control.Visible)
                return true;

            //Find non-public GetState method of control using reflection
            System.Reflection.MethodInfo GetStateMethod = control.GetType().GetMethod("GetState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

            //return control's visibility if GetState method not found
            if (GetStateMethod != null)     
                //return visibility from the state maintained for control
                return (bool)(GetStateMethod.Invoke(control, new object[] { 2 }));
            return false;
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27596529

复制
相关文章

相似问题

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