2013-07-18 8 views
5

Ho un semplice 1x3 TableLayoutPanel. Voglio ottenere una cosa molto semplice: quando la finestra viene ridimensionata, ridimensiona la riga centrale e mantieni le stesse sopra e sotto. Ho provato a fare la cosa logica, che sta impostando le dimensioni rigide della riga superiore e inferiore e la dimensione automatica per la riga centrale. Sfortunatamente, è la riga in basso che viene ridimensionata.Ridimensiona automaticamente la riga TableLayoutPanel quando la finestra viene ridimensionata

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

Tutti i pannelli interni hanno il Dock impostato su Fill e gli ancoraggi predefiniti. Che cosa sto facendo di sbagliato?

risposta

8

Modificare la riga centrale al 100% percento, che indica al sistema che la riga centrale riempirà qualsiasi spazio lasciato. Quindi cambiare questo (credo che i suoi tuoi designer.cs):

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

a:

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

Controllare TableLayoutPanel.RowStyle from MSDN:

  1. righe con RowStyle impostati assoluto sono considerate prima, e le loro altezze fisse sono assegnate.
  2. Le righe con RowStyle impostato su AutoSize sono ridimensionate al loro contenuto.
  3. Lo spazio rimanente viene diviso tra le righe con ROWStyle impostato su Percent.
1

semplicemente impostare le dimensioni assolute per la prima e la terza fila:

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

per essere sicuri che il secondo (centrale) riga deve avere SizeType = SizeType.Percent e Height = 100. Il tuo Form dovrebbe avere la massima Height di 200.

1

ho fatto

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

e ha funzionato ... impostando la parte superiore e inferiore di ancoraggio ho fatto in modo che se ridimensionare la riga crescerà più grande/piccolo, e facendo in modo che le dimensioni della prima e della terza riga siano assolute e la dimensione della percentuale media, ho fatto in modo che solo il centro crescesse più grande/più piccolo