【问题标题】:c# toolstrip doesn't dock under menustripc#toolstrip 不停靠在 menustrip 下
【发布时间】:2014-03-12 11:52:26
【问题描述】:

我有一个使用表单设计器创建的菜单条。然后我想以编程方式在菜单条下添加一个工具条工具栏。原因是这个工具栏是我作为插件添加到主应用程序的一组工具。因此,加载插件时,我会创建工具栏。

当我使用表单设计器手动将工具条添加到表单时,工具条正确定位在菜单条下方。但是,当我以编程方式添加它时,它会捕捉到菜单条上方的表单的最顶部。这是我用来以编程方式添加工具条的代码:

stereoBar = new ToolStrip();
stereoBar.Anchor = (AnchorStyles)(AnchorStyles.Top | AnchorStyles.Left);
//y location is set to 22, the width of the menustrip
stereoBar.Location = new System.Drawing.Point(0, 22);
stereoBar.Dock = DockStyle.Top;
stereoBar.Name = "StereoToolbar";
stereoBar.Text = "Stereo Plugin Toolbar";
stereoBar.ShowItemToolTips = true;
stereoBar.GripMargin = new Padding(2);
Controls.Add(stereoBar);

我在这里缺少什么简单的东西吗?

提前致谢!

【问题讨论】:

  • 也许您需要将它们添加到菜单条而不是控件?
  • 这确实是很奇怪的行为,也很容易重现,我发现真正奇怪的一件事是生成的设计器代码似乎根本不包含任何DockStyle 设置
  • 控件集合中控件的顺序很重要。您需要附加 stereoBar.BringToFront(); 以使其停靠在菜单条下方。
  • @HansPassant BringToFront() 运行良好,感谢您指出这一点! @DrCopyPaste 我同意你的观点,我查看了生成的设计器代码,试图找出是否有不同的事情发生。我唯一注意到的(你在下面指出的)是在设计器代码中,最后要添加的是相对于所有其他自动创建的控件的菜单条!

标签: c# toolstrip menustrip


【解决方案1】:

正如this answer 中所述,在窗体中停靠控件时,将它们添加到窗体中的顺序很重要;即,当添加多个都停靠在顶部的控件时,最后添加的控件将是最顶部的

因此,由于您以编程方式添加工具条并通过设计器添加菜单条,因此设计器代码首先执行,因此菜单条始终位于底部。

我认为有三种方法可以摆脱困境:

第一种方法

正如 Hans Passant 指出的那样,让事情按正确顺序排列的最简单方法就是调用

stereoBar.BringToFront();

在您将其添加到表单的控件之后。

第二种方法

为了规避这个问题,你也可以add the menu strip programmatically and do this after you added the tool strip

第三种方法

另一种方法可能是通过设计器将另一个容器添加到表单(例如面板或组框),该设计器也停靠在顶部,仅用作您将工具条添加到的占位符(因此您无需添加直接到表格了)

【讨论】:

  • 感谢您的回复,您提供了很好的替代解决方案。 BringToFront() 方法解决了这个问题!
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多