如何确定控件的可见性?

SwD*_*n81 10 c# controls visibility .net-3.5 winforms

我有一个TabControl包含几个选项卡.每个标签上都有一个UserControl.我想检查控制的可视性xUserControl AUserControl B.我认为做x.Visible起来UserControl B就足够好了.事实证明,它显示false在调试器中,即使我明确地设置它true并且它从未改变过.然后我在MSDN上阅读Control.Visible:

即使Visible设置为true,如果用户在其他控件后面被遮挡,控件也可能不可见.

令我惊讶的是,这不会奏效.现在我想知道如何判断控件x是否可以从另一个控件中看到UserControl.如果可能的话,我想避免使用布尔值.有没有人碰到这个并找到了解决方案?

注意:Control.IsAccessible在这种情况下,它似乎也是错误的.

Liz*_*Liz 8

不幸的是,控件没有提供任何公开的内容,可以让你检查这个.

一种可能性是在控件'Tag'属性中设置一些东西.标签的目的是将用户数据与控件相关联.所以它可以是任何东西,而不仅仅是一个布尔值.

这是Tag属性doc

如果你真的想要蛮力方式,你可以使用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)