当 DropDownStyle 为 Simple 时,ToolStripCombobox 显示在屏幕的左上角

ToolStripCombobox displays at the top left corner of the screen when DropDownStyle is Simple

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

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

提前感谢您的帮助。

第一次

第二次

要解决此问题,请将此代码放入表单的 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

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

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

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

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