我有一个TabControl http://msdn.microsoft.com/en-us/library/system.windows.forms.tabcontrol.aspx其中包含多个选项卡。每个选项卡都有一个UserControl http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx在上面。我想检查控件的可见性x
on UserControl
A
from UserControl
B
。我想这样做x.Visible
from UserControl
B
就足够了。事实证明,它正在显示false
在调试器中,即使我将其明确设置为true
并且它从未改变过。然后我在 MSDN 上阅读了控制.可见 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.visible.aspx that:
即使 Visible 设置为 true,如果控件被其他控件遮挡,用户也可能看不到该控件。
令我惊讶的是,这是行不通的。现在我想知道如何判断控件是否x
从不同的地方可见UserControl
。如果可能的话,我想避免使用布尔值。有没有人遇到过这个问题并找到解决方案?
注:似乎还表明Control.IsAccessible
在这种情况下是错误的。
不幸的是,该控件不提供任何允许您检查这一点的公开信息。
一种可能性是在控件的“Tag”属性中设置某些内容。标签的目的是将用户数据与控件关联起来。所以它可以是任何东西而不仅仅是布尔值。
这是标签属性文档 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx
如果你真的想要暴力方式,你可以使用反射,基本上调用 GetState(2):
public static bool WouldBeVisible(Control ctl)
{
// Returns true if the control would be visible if container is visible
MethodInfo mi = ctl.GetType().GetMethod("GetState", BindingFlags.Instance | BindingFlags.NonPublic);
if (mi == null) return ctl.Visible;
return (bool)(mi.Invoke(ctl, new object[] { 2 }));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)