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

の場合SetBounds(0, 25, 128, 50)、実際には(2番目のパラメーター)に設定b.Topしています。コントロールを25基準にして上限を設定するには、次を使用します。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 に答える