C# 含有PropertyGrid控件的对话框,如果操作选择下拉框,则此属性窗口再也关闭不了


C# 的 PropertyGrid是不是用得很爽。

但是有一个缺陷一直让勇哥很不爽。

当选择项是一个枚举或者List<string>的时候,用户可以点击下拉框进行选择。

但是,如果使用这个下拉框,会有很大概率关闭不了这个属性窗体。

即你按此窗体的关闭按钮,窗体也无法关闭。

整个程序都被卡住了。

只能用系统的任务管理器把程序强制关闭了。


image.png


这种bug只会在推出下拉框的时候出现。

怎么看都像是此控件固有的bug。


百度翻过了,没有问到这种问题。不知道哪位大侠遇到过,麻烦告诉勇哥解决办法。


临时解决办法也有,就是通过任务管理器,最小化最大化程序进程,你就会看到关闭不掉的属性窗体没有了。


2022/11/16 勇哥注:


发现几个情况:

  1.   出现此问题时,有时候点击窗口看起来没反应,其实是因为等待的时间不够长。

     如果你等个几十分钟,会发现窗口还是关闭了,只是很慢,不明原因的很慢。

    鉴于此点,可能上面勇哥说的最小化等临时解决办法仅仅是时间上凑巧罢了。

  2.   出现问题或者出问题之前,拖动这个窗口会明显很慢,而如果这个窗口不出问题,怎么拖动都是流畅的。

  3.  貌似如果x86调用x64,或者反过来,有可能出这类问题。


由以上的现象,感觉可能是此控件的数据绑定源有问题,也许可以尝试不直接绑定该数据源,而是采用深度复制数据源的副本进行绑定。

按此思路的实验结果勇哥会跟贴发出来。


2022/11/24 勇哥注:


后来发现了两点:

  1.   如果在线程中show出属性窗口,则不会出现卡住的问题

  2.   注释掉顶层窗口的一段启用双缓冲的代码

       

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

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2022-09-06 14:17:02 编辑
  • 评论列表:
  •  周真顺
     发布于 2023-06-20 15:11:30  回复该评论
  • 请问勇哥解决卡顿的问题了吗?最近使用自定义tabControl点击标题栏进行切换,出现标题栏闪烁的问题。加入CreateParam部分代码后闪烁问题解决,但又出现卡顿的问题。现在切换标题栏会出现3s的延迟。找遍全网只发现勇哥文章中有提及,故此求问解决方法!!
    •  勇哥,很想停止
       发布于 2023-07-14 11:26:47  回复该评论
    • 这个问题即使没有CreateParam,还是可能会出现。没能找到最深层的原因。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年9月    »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864