【问题标题】:Why is the Visible property not correctly updated in a UserControl?为什么在 UserControl 中没有正确更新 Visible 属性?
【发布时间】:2011-04-16 08:38:42
【问题描述】:

有时我的 UserControl 的 Visible 属性没有得到正确更新。它发生在我的应用程序启动时,在 OnFontChanged 中,从 InitializeComponent 内部触发,可能是因为尚未设置其他一些东西。我就是不知道是什么。

vScrollBar 是一个 UserControl,位于另一个 UserControl 中。显然,这只发生在尝试将值设置为 true 时。 vScrollBar 已经创建了句柄,正如 IsHandleCreated 上的手表所说的那样。

【问题讨论】:

    标签: c# user-controls visibility scrollbars


    【解决方案1】:

    读取 Visible 属性可为您提供控件的实际可见性状态,而不是“预期”状态。在 InitializeComponent() 方法中始终为 false,直到 Load 事件运行后,表单或控件才可见。如果容器控件不可见,它也会为 false。

    【讨论】:

    • 哇,用这种方式引入错误真的很容易。我设置 Visible 并将其放在下一行的 if() 中,认为这将是我刚刚设置的值。邪恶的东西!
    • @atticae:Microsoft 在 .net 中以某种方式做某事的事实并不总是意味着这是一个好主意。微软似乎无法决定是否有一个属性来说明是否可以看到某物,或者某物是否允许自己被看到;实际上,如果属性被赋予不同的名称,它们会很有用,但无论出于何种原因,Microsoft 决定拥有一个名为 Visible 的属性,它的 getter 返回第一个东西,而它的 setter 控制第二个东西。一些 1970 年代的计算机在设计中存在这样的问题,但人们从不学习......
    【解决方案2】:

    如果表单尚未加载,它可能仍会显示为 false。尝试在 Form 的 OnLoad 事件中设置它。

    【讨论】:

    • 实际实用的解决方案,谢谢!
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多