不可见的选项卡页面(选项卡控件)上的控件返回 Visible = false。

5
我在一个窗体中有一个选项卡控件,它很好用,但是有一个问题。当我选择选项卡2时,所有在选项卡1上的控件都会返回它们的visible属性为false,尽管它们实际上都被设置为visible=false。
我猜这是因为选项卡1被设置为visible=false,所以所有子控件都继承了false。
当然,如果选择选项卡1,则所有控件都会正确地返回visible属性的值。
一定有解决方法。有没有人有解决方案?

1
为什么你想要一个解决方法呢?当它们的父选项卡页不可见时,控件也不可见。这与其他窗口的规则相同。也许如果你告诉我们你想要实现什么,我们可以建议替代方案。 - Paul Sasik
如果控件的“visible”属性设置为false,则在检查该属性时自然会返回false。我是否读错了? - JYelton
当然...这是一个带有几个选项卡页面的选项卡控件。每个选项卡页面上都有若干控件。我需要检查我拥有的 ALERT 面板是否可见。如果可见,则失败运行验证例程...但是,当打开选项卡页2并且它在选项卡页1上时,我正在检查警报面板的可见属性...如果这有意义的话。 - Martin
@JYelton,控件的可见属性不是false,而是因为TabPage不可见,所以返回false。 - Martin
我明白你的意思。当你创建控件时,属性为 true;但是在程序执行期间,当选项卡页未被选择时,选项卡控件会更改它。 - JYelton
3个回答

11

Visible属性有点特殊,它的getter方法不会返回您分配的值。它告诉您控件是否实际可见。如果它位于未选中的选项卡页上,则不会实际可见。这是设计上的考虑。

获取实际“意图可见”状态不受支持。您可以从GetState(2)中获取它,但那是一个内部方法。如果您真的很绝望,那么您可以使用反射。但正确的方式是自己跟踪它。


+1 这让人们更清楚地了解了这个属性的实际情况,谢谢。 - JYelton

1
由于您的面板的Visible属性的行为与您预期的不一致,请尝试将面板的Tag属性设置为其他值,并使用它来决定是否失败验证。

0
制作一个小项目以确认这一点,如果您检查当前未选定的选项卡页上任何控件的Visible属性,则会返回false,因为该控件是不可见的。

如果您想确定用户正在查看哪个选项卡页,最好检查TabControl的SelectedTabSelectedIndex属性。


不,我正在尝试检查面板是否可见=true..这意味着我有一个错误 :-) 也许我应该使用类级别的布尔变量代替.... - Martin
如果第一个选项卡页面不再被选中,那么第一页上的面板也将其可见属性设置为false。(确保您使用==而不是=进行相等性检查。)如果您正在以编程方式设置该面板的可见性,则在其父选项卡页不再处于活动状态时,您不能依赖其设置。您需要像您建议的那样创建一个单独的变量。 - JYelton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接