sic*_*umi 14 c# user-controls winforms
Debug.WriteLine(ucFollow.Visible);
ucFollow.Visible = true;
Debug.WriteLine(ucFollow.Visible);
Run Code Online (Sandbox Code Playgroud)
ucFollow是一个自定义UserControl,没什么特别的.上面的代码打印出来:
False
False
Run Code Online (Sandbox Code Playgroud)
最糟糕的是,这确实切换了UserControl的实际可见性(即,一旦调用此代码,ucFollow就会出现),但似乎某种程度上Visible属性不是......好,在后端可见,而不是反映变化,即使UI本身也是如此.
我甚至不知道从哪里开始排除故障.有没有人有什么想法可以远程引起这种疯狂?
编辑:这是在Visual Studio 2010中使用标准C#WinForm.
sic*_*umi 30
我没有打破C#!:)
事实证明,罪魁祸首是Form.Visible属性.在Form.Visible设置为true之前,无论如何,表单上的任何和所有控件都将是不可见的(Visible = false).
但是,您仍然可以设置 Visible属性 - 只有在Form.Visible属性设置为true之后它们才会生效.
换句话说,当我打电话时ucFollow.Visible = true,我的程序确实正在注册它 - 但是,在代码中的那一点,ucFollow的父Form.Visible仍然是假的.因此,Debugger和我的print语句都识别出"嘿,这个控件的父窗体仍然不可见,所以这个控件不可见.期间."
一旦表单可见,所有更改都生效,一切都很顺利.
故事的道德:除非包含它们的表单已经可见并且正在运行,否则不要依赖控件的Visibility属性.
小智 7
罪魁祸首是控件 Visible 属性实际上是一个属性(带有 get; set;),并且 set 将分配给内部 m_Visible 成员,但 get 将查看所有父控件,并且只有在所有父控件都具有 m_Visible == true 时才会返回 true
| 归档时间: |
|
| 查看次数: |
18492 次 |
| 最近记录: |