0

我有一个ToolStripContainerwith aMenuStrip和一个ToolStripinside,都在顶部。它们在 Windows 上像往常一样排列,工具栏上方的菜单栏。现在,Windows 窗体和 DPI 缩放支持一直有点不确定。虽然在 100% 时一切看起来都很好,但我目前正在使用 110% DPI 缩放以及 ToolStripContainer 中的菜单栏和工具栏开关位置(不过,我怀疑它与更高的缩放因子相同):

在此处输入图像描述

我对为什么会发生这种情况的猜测是,即使它们是由容器排列的,设计师也将这两个控件放置在特定位置,并且通过 DPI 缩放ToolStripContainer其子项的获取位置,这与将工具栏放置在菜单栏上方是一致的,就好像有人拖动条形图并重新排列它们(毕竟这是可以交互的)。

MenuStrip除了用 a替换MainMenu之外,是否有一种简单的(ish)方法可以确保无论 DPI 缩放如何,两者的顺序都保持一致?我有大约 50 个不同的窗口以几乎相同的方式进行更改,并且还宁愿避免将额外的代码放入代码隐藏文件中¹。

到目前为止我尝试过的事情:

  • 设计器中的所有更改都以 100 % 的比例应用。
  • 更改工具栏和菜单栏的 z 顺序以尝试控制它们的顺序。这适用于面板和对接,但显然不适用于ToolStripContainer
  • 对接MenuStrip在顶部。不工作;设计器只是从代码中删除Dock = None并显示Top为默认值,但应用缩放后,它又回到Dock = None了设计器中(即使不接触Form设计器中的 ,运行时的结果也是一样的)。

¹ 这些是控件库的演示应用程序,这里的要点是保持代码干净,并且仍然提供开箱即用的良好体验。因此,将代码隐藏在没有人阅读的已经很糟糕的代码中的设计者专用解决方案将是更可取的。

4

1 回答 1

0

它们是非常令人沮丧的组件。因为它们可以被拖动和移动,所以看起来Location是关键,即使它们的行为有点像停靠。在OnLoad还是OnShown您只是尝试重置所需的位置?

menuStrip.Location = new Point();
toolStrip.Location = new Point(0, toolStrip.Height);
于 2019-09-16T09:35:56.857 回答