我有一个ToolStripContainer
,其中一个MenuStrip
和一个ToolStrip
都在顶部。在Windows上,它们的排列与工具栏上方的菜单栏一样。现在,Windows窗体和DPI缩放支持一直有些困难。虽然一切看起来都很好,但我目前使用的是110%的DPI缩放比例以及ToolStripContainer中的菜单栏和工具栏开关位置(不过我怀疑缩放比例较高时也是如此)
我对为什么会发生这种情况的猜测是,设计人员将两个控件都放置在特定的位置(即使它们是由容器排列的),并且通过DPI缩放,ToolStripContainer
为其子元素获得的位置与将工具栏放在菜单栏上方,就好像有人在拖动这些栏并对其重新排序(毕竟,这可能是交互式的)。
用MenuStrip
替换MainMenu
的简短方法,是否有一种简单的方法来确保无论DPI缩放如何,两者的顺序都保持一致?我大约有50个不同的窗口可以以几乎相同的方式进行更改,并且宁愿避免将多余的代码放入代码隐藏文件中。
到目前为止我已经尝试过的事情:
ToolStripContainer
。MenuStrip
停靠在顶部。不起作用;设计人员只需从代码中删除Dock = None
并显示Top
作为默认值,但应用缩放后,它会返回到设计人员中的Dock = None
(甚至不触摸{{1} }在设计器中,运行时的结果是相同的。¹这些是控件库的演示应用程序,这里的重点是保持代码干净,并且仍然提供开箱即用的良好体验。因此,只有设计师的解决方案更可取,因为该解决方案将代码隐藏在已经让人讨厌的代码中,而没人愿意阅读。
答案 0 :(得分:0)
它们是令人沮丧的组件。因为可以拖动和移动它们,所以看起来Location
是关键,即使它们的行为有点像停靠。在OnLoad
或OnShown
中,您是否只是尝试过重置所需的位置?
menuStrip.Location = new Point();
toolStrip.Location = new Point(0, toolStrip.Height);