如何确定ToolStripContainer中的项目顺序

时间:2019-08-27 06:29:23

标签: winforms windows-forms-designer toolstrip toolstripmenu toolstripcontainer

我有一个ToolStripContainer,其中一个MenuStrip和一个ToolStrip都在顶部。在Windows上,它们的排列与工具栏上方的菜单栏一样。现在,Windows窗体和DPI缩放支持一直有些困难。虽然一切看起来都很好,但我目前使用的是110%的DPI缩放比例以及ToolStripContainer中的菜单栏和工具栏开关位置(不过我怀疑缩放比例较高时也是如此)

enter image description here

我对为什么会发生这种情况的猜测是,设计人员将两个控件都放置在特定的位置(即使它们是由容器排列的),并且通过DPI缩放,ToolStripContainer为其子元素获得的位置与将工具栏放在菜单栏上方,就好像有人在拖动这些栏并对其重新排序(毕竟,这可能是交互式的)。

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

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

  • 设计器中的所有更改均已按100%的比例应用。
  • 更改工具栏和菜单栏的z顺序,以尝试控制其顺序。显然,这适用于面板和对接,但不适用于ToolStripContainer
  • MenuStrip停靠在顶部。不起作用;设计人员只需从代码中删除Dock = None并显示Top作为默认值,但应用缩放后,它会返回到设计人员中的Dock = None(甚至不触摸{{1} }在设计器中,运行时的结果是相同的。

¹这些是控件库的演示应用程序,这里的重点是保持代码干净,并且仍然提供开箱即用的良好体验。因此,只有设计师的解决方案更可取,因为该解决方案将代码隐藏在已经让人讨厌的代码中,而没人愿意阅读。

1 个答案:

答案 0 :(得分:0)

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

menuStrip.Location = new Point();
toolStrip.Location = new Point(0, toolStrip.Height);
相关问题