ToolStripMenuItem出现奇怪的视觉行为

5

我有一个下拉菜单,每次打开时都是动态填充的,以下是实现它的逻辑:

private void joysticksToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
    _joysticks = _joystickWrapper.FindDevices(DeviceType.Joystick);
    joysticksToolStripMenuItem.DropDownItems.Clear();
    foreach (var di in _joysticks)
    {
        var item = new ToolStripMenuItem(di.ProductName);
        item.Checked = di.InstanceGuid == _joystickWrapper.CurrentDeviceInfo.InstanceGuid;
        joysticksToolStripMenuItem.DropDownItems.Add(item);
    }
}

当我运行应用程序时,我看到这个:

That cant be right...

检查位置不正确,蓝色区域太宽了。
有什么想法来修复这个问题吗?整个菜单都是使用System.Windows.Forms,在整个应用程序中没有自定义的视觉代码。
我在我的当前机器(Windows 10 Build 9926)和我的开发服务器(Server 2012R2)上尝试过,并得到了相同的结果。我还将其编译为.NET Framework 4.5和4.5.1。
编辑
对于那些感兴趣的人,这是该项目的git repo:

https://github.com/adam8797/RovControl


我无法在我的Windows 8.1机器上重现这个问题。 - LarsTech
@LarsTech 感谢您抽出时间为我进行测试。发布项目的git仓库是否有帮助? - Adam Schiavone
你最终解决了这个问题吗?我目前也遇到了完全相同的问题。 - Daniel Simpkins
@DanielSimpkins 没有。只能忍受它。 - Adam Schiavone
2个回答

15

我遇到了完全相同的问题,并最终通过将MenuStrip的属性设置为16,16(可能是由于在高DPI机器上编辑表单而被设置为32,32)来解决它。


你知道吗,我几乎完全忘记了这个问题,但是在另一个项目中,同样的问题又出现了!你的修复方法非常有效。 - Adam Schiavone
1
".ImageScaling = ToolStripItemImageScaling.None 解决了我的问题。谢谢你指引我正确的方向。" - Simon

0

我看到你在打开菜单时添加了项目。似乎已经定义了选定区域及其宽度,而且并没有对你插入的新数据做出反应。不妨尝试手动定义菜单项的宽度,看看是否有帮助。


不行。实际上,它甚至不让我修改 item.Widthitem.Height。我改变了它们,但在视觉上没有反映。 - Adam Schiavone
设计时宽度保持在较高的水平怎么样? - Gaurav Sharma
我应该提到,我将宽度设置为600,但没有视觉上的差异。 - Adam Schiavone
菜单项的宽度只能减小宽度。如果要增加菜单项的宽度,还需要增加其父对象的宽度ToolStripDropDownMenu.Width。 - Koryu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接