簡體   English   中英

如何以編程方式添加菜單帶走垂直空間?

[英]How to take away vertical space for programmatically added menu?

我在我的表單中添加了一個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); 

當您設置SetBounds(0, 25, 128, 50) b.Top 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);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM