C# 的 PropertyGrid是不是用得很爽。
但是有一个缺陷一直让勇哥很不爽。
当选择项是一个枚举或者List<string>的时候,用户可以点击下拉框进行选择。
但是,如果使用这个下拉框,会有很大概率关闭不了这个属性窗体。
即你按此窗体的关闭按钮,窗体也无法关闭。
整个程序都被卡住了。
只能用系统的任务管理器把程序强制关闭了。
这种bug只会在推出下拉框的时候出现。
怎么看都像是此控件固有的bug。
百度翻过了,没有问到这种问题。不知道哪位大侠遇到过,麻烦告诉勇哥解决办法。
临时解决办法也有,就是通过任务管理器,最小化最大化程序进程,你就会看到关闭不掉的属性窗体没有了。
2022/11/16 勇哥注:
发现几个情况:
出现此问题时,有时候点击窗口看起来没反应,其实是因为等待的时间不够长。
如果你等个几十分钟,会发现窗口还是关闭了,只是很慢,不明原因的很慢。
鉴于此点,可能上面勇哥说的最小化等临时解决办法仅仅是时间上凑巧罢了。
出现问题或者出问题之前,拖动这个窗口会明显很慢,而如果这个窗口不出问题,怎么拖动都是流畅的。
貌似如果x86调用x64,或者反过来,有可能出这类问题。
由以上的现象,感觉可能是此控件的数据绑定源有问题,也许可以尝试不直接绑定该数据源,而是采用深度复制数据源的副本进行绑定。
按此思路的实验结果勇哥会跟贴发出来。
2022/11/24 勇哥注:
后来发现了两点:
如果在线程中show出属性窗口,则不会出现卡住的问题
注释掉顶层窗口的一段启用双缓冲的代码
protected override CreateParams CreateParams { get { CreateParams cp=base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } }
而且,第2点好像还成了关键。
这个又是为什么呢? 有机会还是得研究一下。
关于这个双缓冲代码的作用及副作用见勇哥另一篇贴子:
C# CreateParams作用和它的副作用
http://www.skcircle.com/?id=2036
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

