2013-03-01 54 views
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); 
+0

您是否嘗試使用Dock?如果使用DockStyle.Top將它們全部添加,它們將被垂直堆疊(不要忘記改變插入順序以更改它們的索引)。 – 2013-03-01 13:02:29

+2

...順便說一下:表單也有一個MainMenuStrip屬性。 – 2013-03-01 13:08:12

+0

@Adriano是的,但它沒有幫助。如果看到示例,該按鈕將位於菜單下。 – Bitterblue 2013-03-01 13:21:25

回答

1

當你SetBounds(0, 25, 128, 50),你實際上是設置b.Top25(第二個參數)。爲了將頂部結合相對於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; 
    } 
} 

[UPDATE 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); 
+0

我知道我在那裏做什麼。但我需要新的控制y位置設置爲0,並在菜單下。它必須是MenuStrip。我希望這有一個小竅門。 – Bitterblue 2013-03-01 13:31:50

+0

更新是一個有趣的想法,但當我在添加後設置我的控件的位置時,它不起作用(我肯定會這樣做)。或者你也有解決的辦法嗎? – Bitterblue 2013-03-01 14:02:26

+1

您是否需要直接將控件添加到窗體的控件集合中?爲什麼不在菜單條下使用'Panel'並將所有控件添加到它?這樣,你應該得到所需的用法。 – 2013-03-01 14:12:56

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