C#工具条不会停靠在菜单条下 - c#

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

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

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

有什么简单的我想念的吗?

提前致谢!

参考方案

如this answer中所述,当以表格形式停靠控件时,将它们添加到表格中的顺序很重要。即,当添加多个全部停靠在顶部的控件时,最后添加的控件将是最顶部。

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

我认为有两种方法可以解决这个难题:

第一种方法

正如汉斯·帕桑特(Hans Passant)所指出的那样,使事情变得正确的最简单方法是简单地调用

stereoBar.BringToFront();

在将其添加到窗体的控件之后。

第二种方法

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

第三种方法

另一种解决方法可能是通过设计器将另一个容器添加到表单(例如,面板或组框),该容器也停靠在顶部,该容器仅充当占位符,将工具条添加到该占位符(因此您不添加到表单)不再直接)

ToolStrip StatusLabel DoubleClick事件不会引发 - c#

订阅动态创建的DoubleClick的ToolStripStatusLabel事件时遇到麻烦。在我的代码中,我在ToolStripStatusLabel内创建了一系列StatusStrip项,并订阅了它的DoubleClick事件,但是看起来它从未出现过private void InitStatusBar() { foreach (CardReader ca…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4