SwD*_*n81 10 c# controls visibility .net-3.5 winforms
我有一个TabControl包含几个选项卡.每个标签上都有一个UserControl.我想检查控制的可视性x上UserControl A的UserControl B.我认为做x.Visible起来UserControl B就足够好了.事实证明,它显示false在调试器中,即使我明确地设置它true并且它从未改变过.然后我在MSDN上阅读Control.Visible:
即使Visible设置为true,如果用户在其他控件后面被遮挡,控件也可能不可见.
令我惊讶的是,这不会奏效.现在我想知道如何判断控件x是否可以从另一个控件中看到UserControl.如果可能的话,我想避免使用布尔值.有没有人碰到这个并找到了解决方案?
注意:Control.IsAccessible在这种情况下,它似乎也是错误的.
不幸的是,控件没有提供任何公开的内容,可以让你检查这个.
一种可能性是在控件'Tag'属性中设置一些东西.标签的目的是将用户数据与控件相关联.所以它可以是任何东西,而不仅仅是一个布尔值.
如果你真的想要蛮力方式,你可以使用Reflection,基本上调用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 }));
}
Run Code Online (Sandbox Code Playgroud)