2013-07-18 11 views
5

Mam prosty 1x3 TableLayoutPanel. Chcę osiągnąć bardzo prostą rzecz: Gdy okno zostanie przeskalowane, zmień rozmiar środkowego rzędu i zachowaj te same górne i dolne. Próbowałem zrobić logiczną rzecz, która ustawia sztywne rozmiary górnego i dolnego rzędu oraz autosize dla środkowego rzędu. Niestety jest to dolny rząd, który zmienia rozmiar.Automatyczne zmienianie rozmiaru wiersza TableLayoutPanel po zmianie rozmiaru okna

// 
// tableLayoutPanel1 
// 
this.tableLayoutPanel1.ColumnCount = 1; 
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 
this.tableLayoutPanel1.Controls.Add(this.topPanel, 0, 0); 
this.tableLayoutPanel1.Controls.Add(this.middlePanel, 0, 1); 
this.tableLayoutPanel1.Controls.Add(this.bottomPanel, 0, 2); 
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; 
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); 
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; 
this.tableLayoutPanel1.RowCount = 1; 
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 140F)); 
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F)); 
this.tableLayoutPanel1.Size = new System.Drawing.Size(1102, 492); 
this.tableLayoutPanel1.TabIndex = 19; 

Wszystkie panele wewnętrzne mają Docka ustawione jako Wypełnienie i domyślne kotwice. Co ja robię źle?

Odpowiedz

8

Zmień środkowy rząd na 100% procent, co powie systemowi, że środkowy rząd wypełni lukę w lewo. Więc to zmienić (wierzę jej swoje designer.cs):

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 

do:

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); 

Odjazd TableLayoutPanel.RowStyle from MSDN:

  1. Wiersze z RowStyle ustawiony Absolutu są uważane za pierwszy, a ich stałe wysokości są przydzielane.
  2. Wiersze z ustawieniem RowStyle na AutoSize mają rozmiar zgodny z ich zawartością.
  3. Pozostałe miejsce jest podzielone na wiersze z ustawieniemRowStyle na Procent.
1

Wystarczy ustawić rozmiary bezwzględne dla pierwszych i trzecich rzędów:

tableLayoutPanel1.RowStyles[0].Height = 100; 
tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute; 
tableLayoutPanel1.RowStyles[2].Height = 100; 
tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Absolute; 

mieć pewność, że drugi (środkowy) wiersz powinien mieć SizeType = SizeType.Percent i Height = 100. Twój Form powinien mieć maksymalną Height 200.

1

zrobiłem

this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); 
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 
    this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); 
    this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); 

i to działało ... ustawiając górną kotwicę i dno Upewniłem się, że jeśli zmiana rozmiaru wiersz wzrośnie większy/mniejszy, i przez zrobienie pierwszego i trzeciego wiersza bezwzględnego rozmiaru i średniego rozmiaru procentowego upewniłem się, że tylko środek będzie rósł/będzie mniejszy

Powiązane problemy