2013-03-01 10 views
5

Tôi thêm MenuStrip vào biểu mẫu của mình và tôi muốn thêm các điều khiển khác bên dưới nó như bình thường Điểm (0, 0) là góc trên cùng bên trái của không gian biểu mẫu trống. Sau khi tôi thêm menu vào biểu mẫu của tôi và thêm nhiều điều khiển hơn, chúng chồng lên nhau. Vì vậy, tôi muốn lấy đi một số chiều cao của khách hàng rect cho menu và một nút với Location = (0,0) phải là RIGHT bên dưới menu.Làm thế nào để lấy đi không gian theo chiều dọc cho menu được lập trình bổ sung?

Tôi làm như thế nào?

Nếu tôi gán một tài sản MainMenu cho Menu của biểu mẫu, nó sẽ tự động nhưng tôi thực sự muốn và cần sử dụng MenuStrip.


Edit: này không làm việc:

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

Trong khi làm việc này như tôi muốn nó phải làm gì với 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

Bạn đã cố gắng sử dụng Dock chưa? Nếu bạn thêm tất cả chúng với DockStyle.Top chúng sẽ được xếp chồng lên nhau theo chiều dọc (đừng quên rever thứ tự chèn để thay đổi chỉ mục của chúng). –

+2

... nhân tiện: Biểu mẫu có thuộc tính MainMenuStrip. –

+0

@Adriano Có, nhưng không hiệu quả. Nếu bạn thấy ví dụ, nút sẽ nằm trong menu. – Bitterblue

Trả lời

1

Khi bạn SetBounds(0, 25, 128, 50), bạn đang thực sự thiết lập b.Top để 25 (tham số thứ hai). Để thiết lập tương đối giới hạn đầu vào menu kiểm soát, sử dụng:

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

[UPDATE]

Ngoài ra, bạn có thể sử dụng:

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]

Hoặc bạn chỉ có thể sử dụng 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

Tôi biết những gì tôi đang làm ở đó. Nhưng tôi cần các điều khiển mới để có vị trí y được đặt thành 0 và nằm trong menu. Và nó phải là MenuStrip. Tôi hy vọng có một mẹo nhỏ cho điều đó. – Bitterblue

+0

Bản cập nhật là một ý tưởng thú vị nhưng nó sẽ không hoạt động khi tôi đặt vị trí của các điều khiển của tôi sau khi thêm (và tôi chắc chắn làm điều đó). Hay bạn có sửa chữa cho điều đó không? – Bitterblue

+1

Bạn có cần thêm các điều khiển trực tiếp vào bộ sưu tập kiểm soát của biểu mẫu không? Tại sao bạn không sử dụng 'Bảng điều khiển' bên dưới dải menu và thêm tất cả các điều khiển vào nó? Bằng cách này, bạn sẽ nhận được mức sử dụng mong muốn. –

1

Sử dụng DockStyle.Top trong cả MenuStrip và Panel, nhưng thêm chúng theo thứ tự ngược lại. Thêm một điều khiển với Dock = Top đặt điều khiển cuối cùng này gần biên giới nhất, nghĩa là, trên đầu trang của tất cả các điều khiển khác. Vì vậy, không cần sử dụng các hằng số riêng tư và trình xử lý sự kiện:

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