2015-02-17 2 views
1

Это еще один вопрос Windows Forms (глупый?) О макете.Dock.Left/Right breaks simple docking based layout

Желаемое расположение довольно прост:

  • Форма
    • ListBox (Dock.Fill)
    • Panel (Dock.Bottom)
      • Кнопка (Dock.Right)

Вот код:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     this.Controls.Add(new ListBox { Dock = DockStyle.Fill }); 

     Panel panel = new Panel { AutoSize = true, Dock = DockStyle.Bottom }; 
     panel.Controls.Add(new Button { Text = "X", Dock = DockStyle.Right }); 

     this.Controls.Add(panel); 
    } 
} 

Вот ожидаемый результат:

+----------+ 
|   | 
| ListBox | 
|   | 
|   | 
+----------+ 
+----------+ 
| Panel | 
|  +---+| 
|  | X || 
|  +---+| 
+----------+ 

Вопрос заключается в том, что если я Dock.Left или Dock.Right этой кнопке, Panel сжимается и исчезает с Button:

enter image description here

Но с Dock.Top или Dock.BottomButton и Panel появляются, как ожидалось:

enter image description here

Что я делаю неправильно?

ответ

1

Я думаю, что ваш AutoSize противоречит вашей доке.

Попробуйте без:

Panel panel = new Panel { AutoSize = false, Dock = DockStyle.Bottom }; 
+0

Спасибо за ваш ответ, но Авторазмер является «необходимым». И я не понимаю, где проблема для WinForms: 'Button' получает height =>' Panel' получает ту же высоту => Готово. – Pragmateek

+0

@Pragmateek Но ваша кнопка * не имеет высоту - она ​​хочет состыковать справа, что требует от нее также получить высоту от родителя. AutoSize на панели не может работать в этом сценарии. – LarsTech

+0

OK Я вижу, что он не работает вообще, как DockPanel в WPF, где DockPanel будет адаптировать его высоту к контенту. :/Думаю, я должен пойти с 'TableLayoutPanel'. Любое другое предложение? Благодарю. – Pragmateek