当 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
设置为 Simple
的 ToolStripComboBox
会遇到此错误,但将 DisplayStyle
设置为DropDown
或 DropDownList
没有这个错误。
使用上面的代码,我在显示之前强制创建了所有者 ToolStripDropDownMenu
。
在调用父对象的 Click
事件之前修改 ToolStripComboBox
上的 SelectedIndex
将导致此问题。
在我的例子中,父对象是 ToolStripMenuItem
。在 ToolStripMenuItem
的 Click
事件中修改 SelectedIndex
时,问题已修复。
我只在 .NET Core 3.1
遇到过这个问题,.NET 4.x
没有遇到过。
通过在设计模式中将 ToolStripCombobox 样式设置为 Dropdown,然后在窗体的加载事件中设置为 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
设置为 Simple
的 ToolStripComboBox
会遇到此错误,但将 DisplayStyle
设置为DropDown
或 DropDownList
没有这个错误。
使用上面的代码,我在显示之前强制创建了所有者 ToolStripDropDownMenu
。
在调用父对象的 Click
事件之前修改 ToolStripComboBox
上的 SelectedIndex
将导致此问题。
在我的例子中,父对象是 ToolStripMenuItem
。在 ToolStripMenuItem
的 Click
事件中修改 SelectedIndex
时,问题已修复。
我只在 .NET Core 3.1
遇到过这个问题,.NET 4.x
没有遇到过。
通过在设计模式中将 ToolStripCombobox 样式设置为 Dropdown,然后在窗体的加载事件中设置为 Simple,我能够正确打开它。