gpt4 book ai didi

winforms - 使用 WinForms 显示带有大量 ComboBox 控件的选项卡很慢

转载 作者:行者123 更新时间:2023-12-03 16:11:10 26 4
gpt4 key购买 nike

我已经设置了一个带有多个选项卡的对话框。其中之一包含 20 个组合框,每个组合框包含 100 多个项目,添加如下:

foreach (var x in collection)
{
string text = FormatItem (x);
combo.Items.Add (text);
}

所以这些元素根本没有什么花哨的。它们是纯字符串,并且在创建对话框时填充组合框。这几乎是瞬间发生的。

但是,当用户第一次单击包含所有这些组合框的选项卡时,GUI 会卡住几秒钟(而且我在一台非常强大的机器上运行)。

我加载了 System.Windows.Forms 的符号并试图在程序卡住时闯入调试器。我发现的是具有以下调用的堆栈跟踪:
System.Windows.Forms.Control.CreateHandle()
System.Windows.Forms.ComboBox.CreateHandle()
System.Windows.Forms.Control.CreateControl(...) x 3
System.Windows.Forms.Control.SetVisibleCore(true)
System.Windows.Forms.TabPage.Visible.set(true)

这会导致大量的原生转换, WndProc调用等。我想这会发生在每个组合框中的每个项目中。呼。

显然,我无法优化 WinForms。但也许我可以采取一些措施来避免这一切在我可怜的 GUI 上迷失方向?有任何想法吗?

注意事项:
  • 我没有在组合框上附加事件处理程序,当控件被真正创建时可以调用它们。
  • 如果我尝试访问 Handle在创建并填充表单后,组合框的属性,我在那一刻支付罚款,而不是在选项卡第一次可见时。但是在创建表单时必须等待几秒钟也是 Not Acceptable 。我真的很想摆脱漫长的设置时间。
  • 申请思路BeginUpdateEndUpdate不适用于此处:这些应该用于防止控件在其项目列表被填充时重新绘制。但在我的情况下,问题发生在控件设置好之后。
  • 最佳答案

    你所说的与我所观察到的不一致...... :s

    但是您是否尝试过使用 .BeginUpdate/.EndUpdate ?

    您可以尝试的另一件事是在需要之前不要填​​充框。延迟它直到框获得焦点,例如......(如果你捕获下拉事件,一些用户可能会因为向上/向下箭头键不起作用而烦恼。)

    关于winforms - 使用 WinForms 显示带有大量 ComboBox 控件的选项卡很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/581196/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com