【问题标题】:ToolStripCombobox displays at the top left corner of the screen when DropDownStyle is Simple当 DropDownStyle 为 Simple 时,ToolStripCombobox 显示在屏幕的左上角
【发布时间】:2016-11-02 22:28:14
【问题描述】:

我有一个ToolStripCombobox,当我将它的DropDownStyle 设置为Simple 时。我第一次打开菜单时,它显示在屏幕的左上角。 但是,当我第二次选择相同的项目时,它会显示在正确的位置。

有没有办法阻止代码在屏幕左上角显示列表?

提前感谢您的帮助。

第一次

第二次

【问题讨论】:

  • 我可以确认这个问题。该问题包含重现问题的步骤。

标签: c# winforms toolstrip toolstripdropdown toolstripcombobox


【解决方案1】:

要解决这个问题,请将这段代码放在Load 表单的事件中:

var item = toolStripComboBox1;
var createControl = item.Control.Parent.GetType().GetMethod("CreateControl",
    System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
createControl.Invoke(item.Control.Parent, new object[] { true });

这是一个奇怪的错误,我不知道为什么将DisplayStyle 设置为SimpleToolStripComboBox 会遇到此错误,但是通过将DisplayStyle 设置为DropDownDropDownList 不会有这个错误。

使用上面的代码,我强制在显示之前创建所有者ToolStripDropDownMenu

【讨论】:

  • 完美的解决方案,谢谢 Reza。另外,也感谢您编辑问题。
  • 顺便说一句,当您接受答案时,如果您还通过单击帖子附近的向上箭头为答案投票,那就太好了。它根本不是强制性的,但它是常见的,合理的和推荐的。有关接受答案如何工作的更多信息,请参阅post
  • 嗨 Reza,我第一次这样做,但我没有足够的声誉。现在我愿意。再次感谢。
【解决方案2】:

通过在设计模式中将 ToolStripCombobox 样式设置为 Dropdown,然后在表单的加载事件中设置为 Simple,我能够正确打开它。

【讨论】:

    【解决方案3】:

    在调用父对象的Click 事件之前修改ToolStripComboBox 上的SelectedIndex 将导致此问题。

    在我的例子中,父对象是ToolStripMenuItem。在ToolStripMenuItemClick 事件中修改SelectedIndex 时,问题已得到修复。

    我只在.NET Core 3.1 中遇到过这个问题,在.NET 4.x 中没有。

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 2011-07-29
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多