如何识别控件的可见性是不是被用户更改?
Posted
技术标签:
【中文标题】如何识别控件的可见性是不是被用户更改?【英文标题】:How to identify whether visibility of the control is changed by user or not?如何识别控件的可见性是否被用户更改? 【发布时间】:2015-02-20 04:31:46 【问题描述】:我的用户控件继承了System.Windows.Forms.Control
类。以下链接描述了控件的“可见”属性
Control.Visible
根据上面的链接,如果控件存在于非活动选项卡中,即使我们没有以编程方式设置它,Control.Visible 也会返回 false
问题: 如何确定可见性是否被用户或其他控件禁用?
注意:
我尝试覆盖 Contorl
的 Visible
属性,但它不可覆盖。
说明
如果我的控件存在于未选择的选项卡中,则 Control.Visible 返回 false。如果用户想在Bitmap
或其他东西中绘制控件(导出),我还需要确定子控件的可见性。由于我的控件不可见,因此没有可靠的方法来确定子控件的可见性
【问题讨论】:
【参考方案1】: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;
【讨论】:
以上是关于如何识别控件的可见性是不是被用户更改?的主要内容,如果未能解决你的问题,请参考以下文章