c#toolstrip不会在menustrip下停靠

时间:2014-03-12 11:52:26

标签: c# toolstrip menustrip

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

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

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);

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

this answer中所述,当表单中的对接控件时,将表单添加到表单的顺序很重要;即,当添加所有对接到顶部的多个控件时,添加的最后一个控件将是最顶层的。

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

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

第一种方法

正如Hans Passant指出的那样,让事情顺利进行的最简单方法就是简单地打电话

stereoBar.BringToFront();

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

第二种方法

为了避免这种情况,你也可以add the menu strip programmatically and do this after you added the tool strip

第三种方法

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