为啥在 UserControl 中没有正确更新 Visible 属性?
Posted
技术标签:
【中文标题】为啥在 UserControl 中没有正确更新 Visible 属性?【英文标题】: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 上的手表所说的那样。
【问题讨论】:
【参考方案1】:读取 Visible 属性可为您提供控件的实际可见性状态,而不是“预期”状态。在 InitializeComponent() 方法中始终为 false,直到 Load 事件运行后,表单或控件才可见。如果容器控件不可见,它也会为 false。
【讨论】:
哇,用这种方式引入错误真的很容易。我设置 Visible 并将其放在下一行的 if() 中,认为这将是我刚刚设置的值。邪恶的东西! @atticae:Microsoft 在 .net 中以某种方式做某事的事实并不总是意味着这是一个好主意。微软似乎无法决定是否有一个属性来说明是否可以看到某物,或者某物是否允许自己被看到;实际上,如果属性被赋予不同的名称,它们会很有用,但无论出于何种原因,Microsoft 决定拥有一个名为Visible
的属性,它的 getter 返回第一个东西,而它的 setter 控制第二个东西。一些 1970 年代的计算机在设计中存在这样的问题,但人们从不学习......【参考方案2】:
如果表单尚未加载,它可能仍会显示为 false。尝试在 Form 的 OnLoad 事件中设置它。
【讨论】:
实际实用的解决方案,谢谢!以上是关于为啥在 UserControl 中没有正确更新 Visible 属性?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在我的 UserControl 中重置 TextBox 的背景?
为啥 UserControl 的 Unloaded 事件不会触发?
为啥我在 UITableCellView 中的 UIView 中的 UILabel 在正确的数据库调用后没有更新(似乎与单元重用有关)?