我的usercontrol继承了System.Windows.Forms.Control
类。以下链接描述了控件的“可见”属性
Control.Visible
根据上面的链接,如果在非活动选项卡中存在控件,那么即使我们没有以编程方式设置它,Control.Visible也会返回false
问题: 如何确定用户或其他控件是否禁用了可见性?
注意:
我尝试覆盖Visible
的{{1}}属性,但它不能覆盖。
解释
如果我的控件存在于未选中的选项卡中,则Control.Visible返回false。如果用户想要在Contorl
或其他内容中绘制控件(导出),我还需要确定子控件的可见性。由于我的控件不可见,因此没有可靠的方法来确定子控件的可见性
答案 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;
}