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

时间:2014-12-22 04:18:34

标签: c# winforms tabs user-controls visibility

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

  

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

问题: 如何确定用户或其他控件是否禁用了可见性?

注意: 我尝试覆盖Visible的{​​{1}}属性,但它不能覆盖。

解释

如果我的控件存在于未选中的选项卡中,则Control.Visible返回false。如果用户想要在Contorl或其他内容中绘制控件(导出),我还需要确定子控件的可见性。由于我的控件不可见,因此没有可靠的方法来确定子控件的可见性

1 个答案:

答案 0 :(得分:0)

Windows窗体中的所有控件都在内部保持其状态。可见性也是他们在州内维持的事情之一。因为它有助于确定为什么控件的可见性发生了变化。

  如果您的控件上方有控件,

Control.Visible将返回false   隐藏控件或控件的父级。但可见的价值   只有当用户将其设置为false时,state中的属性才为false。

代码:

        //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;
        }