我在表单中添加MenuStrip,我想在其下面添加其他控件,就像通常的Point(0,0)是空表单空间的左上角一样。将菜单添加到表单并添加更多控件后,它们相互重叠。所以我想取消菜单中某个客户端矩形的高度,而Location = (0,0)
的按钮必须在菜单下方 RIGHT 。
我该怎么做?
如果我将MainMenu分配给表单的Menu属性,它会自动执行,但我真的想要并且需要使用MenuStrip。
<小时/> 修改:这不起作用:
MenuStrip menu = new MenuStrip();
menu.Items.Add("File");
menu.AutoSize = false;
menu.Height = 50;
menu.Dock = DockStyle.Top;
MainMenuStrip = menu;
Controls.Add(menu);
Button b = new Button();
b.Text = "hello world";
b.SetBounds(0, 25, 128, 50);
Controls.Add(b);
虽然这可以像我想的那样使用MenuStrip:
Menu = new MainMenu();
Menu.MenuItems.Add("File");
Button b = new Button();
b.Text = "hello world";
b.SetBounds(0, 0, 128, 50);
Controls.Add(b);
答案 0 :(得分:1)
当您SetBounds(0, 25, 128, 50)
时,您实际上是将b.Top
设置为25
(第二个参数)。要设置相对于menu
控件的上限,请使用:
b.SetBounds(0, menu.Bottom, 128, 50);
<强> [UPDATE] 强>
或者,您可以使用:
public partial class Form1 : Form
{
private int menuStripHeight = 50;
public Form1()
{
InitializeComponent();
this.ControlAdded += Form1_ControlAdded;
}
private void Form1_Load(object sender, EventArgs e)
{
MenuStrip menu = new MenuStrip();
menu.Items.Add("File");
menu.AutoSize = false;
menu.Height = menuStripHeight; ;
menu.Dock = DockStyle.Top;
MainMenuStrip = menu;
Controls.Add(menu);
Button b = new Button();
b.Text = "hello world";
// note that the position used is 0,0
b.SetBounds(0, 0, 128, 50);
Controls.Add(b);
}
void Form1_ControlAdded(object sender, ControlEventArgs e)
{
if (e.Control.GetType().FullName != "System.Windows.Forms.MenuStrip")
e.Control.Top += menuStripHeight;
}
}
[更新2]
或者您可以使用Panel
:
MenuStrip menu = new MenuStrip();
menu.Items.Add("File");
menu.AutoSize = false;
menu.Height = menuStripHeight; ;
menu.Dock = DockStyle.Top;
MainMenuStrip = menu;
Controls.Add(menu);
Panel p = new Panel();
p.SetBounds(0, menuStripHeight, this.Width, this.Height);
Controls.Add(p);
Button b = new Button();
b.Text = "hello world";
p.Controls.Add(b);
b.SetBounds(0, 0, 128, 50);
答案 1 :(得分:1)
在MenuStrip和Panel中使用DockStyle.Top,但以相反的顺序添加它们。使用Dock = Top添加控件会使最后一个控件最靠近边框,即在所有其他控件之上。所以不使用私有常量和事件处理程序:
MenuStrip menu = new MenuStrip() {
AutoSize = false,
Dock = DockStyle.Top
};
menu.Items.Add("File");
Panel p = new Panel(){
Dock = DockStyle.Top
};
Controls.Add(p);
Controls.Add(menu);
MainMenuStrip = menu;
Button b = new Button(){
Text = "hello world"
};
p.Controls.Add(b);
b.SetBounds(0, 0, 128, 50);