我的用户控件继承了System.Windows.Forms.Control类。下面的链接描述控件Control.Visible的“可见”属性
按照上面的链接,如果非活动选项卡中存在控件,那么Control.Visible将返回false,即使我们没有以编程方式设置它。
问题:如何识别可见性是否被用户或其他控件禁用?
注意:我试图重写Contorl的Visible属性,但它不是可重写的。
解释
如果我的控件存在于未选中的选项卡中,则Control.Visible返回false。如果用户想要在Bitmap或其他东西中绘制控件(导出),我也需要确定子控件的可见性。由于我的控件不可见,因此无法可靠地确定子控件的可见性。
发布于 2014-12-24 08:38:02
windows窗体中的所有控件都在内部维护其状态。能见度也是他们所保持的状态之一。因为它有助于确定为何更改控件的可见性。
如果控件上方有控件或隐藏了控件的父控件,则
Control.Visible将返回false。但是,只有当用户将其设置为false时,状态下可见属性的值才为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;
}https://stackoverflow.com/questions/27596529
复制相似问题