5

我在我的表单中添加了一个MenuStrip,我想在它下面添加其他控件,就像通常的 Point(0, 0) 是空白表单空间的左上角一样。在我将菜单添加到我的表单并添加更多控件后,它们会相互重叠。所以我想为菜单去掉一些客户端矩形的高度,并且一个按钮Location = (0,0)必须在菜单下方。

我怎么做 ?

如果我将 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);
4

2 回答 2

1

当 you 时SetBounds(0, 25, 128, 50),您实际上设置b.Top25(第二个参数)。为了设置相对于menu控件的上界,请使用:

b.SetBounds(0, menu.Bottom, 128, 50);

[更新]

或者,您可以使用:

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);
于 2013-03-01T13:24:46.467 回答
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);
于 2013-12-10T18:37:06.237 回答