c#toolstrip不';t停靠在门努斯特里普下

c#toolstrip不';t停靠在门努斯特里普下,c#,toolstrip,menustrip,C#,Toolstrip,Menustrip,我有一个使用表单设计器创建的menustrip。然后,我想以编程方式将toolstrip工具栏添加到menustrip下。原因是这个工具栏是我作为插件添加到主应用程序的一组工具。因此,加载插件时,我会创建工具栏 当我使用forms designer将toolstrip手动添加到表单时,toolstrip正确定位在menustrip下。但是,当我以编程方式添加它时,它会捕捉到表单的最顶部,即menustrip上方。以下是我用于以编程方式添加toolstrip的代码: stereoBar = new

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

当我使用forms designer将toolstrip手动添加到表单时,toolstrip正确定位在menustrip下。但是,当我以编程方式添加它时,它会捕捉到表单的最顶部,即menustrip上方。以下是我用于以编程方式添加toolstrip的代码:

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);
这里有什么简单的东西我遗漏了吗

提前谢谢

如中所述,在窗体中停靠控件时,将控件添加到窗体的顺序很重要;i、 e.添加多个控件时,所有控件都停靠在顶部,最后添加的控件将是最顶部的控件

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

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

第一种方法 正如汉斯·帕桑特所指出的那样,让事情按正确的顺序进行的最简单的方法就是打电话

stereoBar.BringToFront();
就在您将其添加到窗体控件之后

第二种方法 为了避免这种情况,您还可以
以编程方式添加菜单条,并在添加工具条后执行此操作

第三种方法
另一种解决方法可能是通过设计器将另一个容器(例如,面板或groupbox)添加到表单中,该设计器也停靠在顶部,只是作为您添加工具栏的占位符(因此您不再直接添加到表单中)

也许您需要将它们添加到菜单中而不是控件?这确实是一种非常奇怪的行为,而且很容易复制,我发现一件非常奇怪的事情是,生成的设计器代码似乎没有包含任何
DockStyle
设置,控件集合中的控件顺序很重要。您需要附加
stereoBar.BringToFront()
将其停靠在菜单条下方。@HansPassant the BringToFront()运行良好,感谢您指出这一点@DrCopyPaste我同意你的看法,我查看了生成的设计器代码,试图找出是否有不同的情况发生。我注意到的唯一一件事(您在下面指出)是,在设计器代码中,最后要添加的是相对于自动创建的所有其他控件的menustrip!感谢您的回复,您提供了很好的替代解决方案。BringToFront()方法解决了这个问题!