2013-07-18 4 views
5

Ich habe eine einfache 1x3 TableLayoutPanel. Ich möchte eine sehr einfache Sache erreichen: Wenn die Größe des Fensters geändert wird, ändern Sie die Größe der mittleren Reihe und behalten Sie die obere und untere gleich. Ich habe versucht, die logische Sache zu tun, die starre obere und untere Reihe Größen und Autosize für die mittlere Reihe einstellt. Leider ändert sich die Größe der unteren Zeile.Größe automatisch ändern TableLayoutPanel Zeile bei Fenstergröße

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

Alle inneren Paneele haben Dock-Set zum Füllen und Standardanker. Was mache ich falsch?

Antwort

8

Ändern Sie die mittlere Zeile in 100%, was dem System mitteilt, dass die mittlere Zeile jede Lücke füllt. So dies ändern (ich glaube, es ist deine designer.cs):

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

zu:

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

prüfen TableLayoutPanel.RowStyle from MSDN:

  1. Reihen mit RowStyle zu Absolute gesetzt betrachtet werden zuerst, und ihre festen Höhen sind zugeordnet.
  2. Zeilen mit RowStyle, die auf AutoSize festgelegt sind, sind auf ihren Inhalt zugeschnitten.
  3. Der verbleibende Platz ist in Zeilen aufgeteilt, wobeiRowStyle auf Prozent gesetzt ist.
1

Setzen Sie einfach absolute Größen für die erste und dritte Reihe:

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

Um sicherzustellen, dass die zweite (Mitte) Reihe SizeType = SizeType.Percent und Height = 100 haben sollte. Ihre Form sollte maximal haben Height von 200.

1

i

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

und es funktionierte ... durch Setzen der Anker oben und unten i sicher gemacht, dass, wenn die Größe der Reihe wachsen wird größer/kleiner, und indem ich die ersten und dritten Reihen absolute Größe und die mittlere prozentuale Größe mache, stellte ich sicher, dass nur die Mitte größer/kleiner wird