2014-12-30 3 views
2

У меня есть панель, внутри которой я пытаюсь центрировать элементы управления. Но, видимо, панели не любят заполнение, когда они пристыковываются к краю элемента управления. Вот текущий код для моей панели:Как мне разместить содержимое в панели?

buttonPanel = new Panel(); 
buttonPanel.Width = 300; 
buttonPanel.Height = 50; 
buttonPanel.Dock = DockStyle.Bottom; 
buttonPanel.Padding = new Padding((this.ClientSize.Width - buttonPanel.Width)/2, 0, 
           (this.ClientSize.Width - buttonPanel.Width)/2, 0); 
buttonPanel.BackColor = Color.Transparent; 
this.Controls.Add(buttonPanel); 

У меня есть одна кнопка, расположенная внутри панели. То, что я ожидаю от вышеуказанного кода, заключается в том, что элемент управления удобно расположен слева от 300-кратного «прямоугольника», расположенного в центре панели. Но кнопка расположена на самой левой, как будто обивка игнорируется:

enter image description here

Как центрировать набор кнопок в центре моей формы?

+0

Padding наблюдается в контейнерах, которые выполняют автоматическую компоновку. Как FlowLayoutPanel и TableLayoutPanel. Не панель, это просто. –

ответ

2

Design Time подход

во время разработки, поставить кнопку в вашем контейнер и выберите свою кнопку. Затем используйте Центр Горизонтально и Центр по вертикали от План панель инструментов, чтобы поместить вашу кнопку в центр панели. После этого перейдите к свойствам кнопок и удалите каждый якорь из свойства Anchor.

Coding подхода

Panel panel = new Panel(); 
panel.Size = new Size(300, 100); 
panel.Dock = DockStyle.Bottom; 

Button button = new Button(); 
button.Size = new Size(70, 25); 
button.Location = new Point((panel.Width - button.Width)/2, (panel.Height - button.Height)/2); 
button.Anchor = AnchorStyles.None; 

panel.Controls.Add(button); 
this.Controls.Add(panel); 
+0

Я не использую конструктор, я все код с нуля – Shadow

+0

@ user3189142 Это все равно, если вы кодируете или нет. Удаление анкеров помогает вам держать свои элементы управления там, где они есть, поэтому они всегда совпадают с родительским размером. – MahanGM

+0

Ну, это 'button.Anchor = AnchorStyles.None;' решена проблема с кнопкой, не двигающейся: D спасибо – Shadow

1

Вы должны выровнять кнопку внутри панели, установив нужную позицию кнопки не отступы на панели в:

button1.Left = (int)(panel1.Width * 0.5f - button1.Width * 0.5f); 
button1.Top = (int)(panel1.Height * 0.5f - button1.Height * 0.5f); 

или

button1.Location = new Point() 
{ 
    X = panel1.Width/2 - button1.Width/2, 
    Y = panel1.Height/2 - button1.Height/2 
}; 

результат тот же.

Если переопределить OnResize метод кнопка будет оставаться в центре также при изменении размеров формы:

protected override void OnResize(EventArgs e) 
{ 
    button1.Location = new Point() 
    { 
     X = panel1.Width/2 - button1.Width/2, 
     Y = panel1.Height/2 - button1.Height/2 
    }; 
    base.OnResize(e); 
} 
+0

Это половина работает lol. Он помещает его в нужное место, но остается в этом месте, даже когда я изменяю размер формы. Есть ли способ исправить это? – Shadow

+0

Я добавил еще один пример. – t3chb0t

+0

Он по-прежнему не двигается. Он просто остается в одном месте и, кажется, удаляется из формы, когда я изменяю его размер. Если я сделаю это больше, он вернется снова. Вы зафиксировали позицию, поэтому +1 для этого. – Shadow