2010-05-04 16 views
15

Ich habe ein tablelayoutpanel. 2x2 - 2 Spalten 2 Zeilen.Ändern Sie Zeilen-/Spaltenspanne programmgesteuert (tablelayoutpanel)

Zum Beispiel habe ich eine Schaltfläche button1 in einer 1 Zeile, zweite Spalte hinzugefügt. button1 hat eine Dock-Eigenschaft, die auf Fill gesetzt ist. Mit VS Designer können Spalten-/Zeilenspanneneigenschaften von button1 festgelegt werden.

Ich mag eine Verfügbarkeit Zeilenspanne Eigenschaft button1programmatisch, ändern, so kann sie alle zweite Kolonne (1 Reihe und zweite Reihe) und die Verfügbarkeit füllt es zurück zu setzen.

Wie?

Antwort

25

Was ist mit diesem Code?

private void button1_Click(object sender, EventArgs e) 
{ 
    var control = sender as Control; 

    if(control == null) 
     return; 

    if (1 == tableLayoutPanel1.GetRowSpan(control)) 
    { 
     tableLayoutPanel1.SetRowSpan(control, 2); 
    } 
    else 
    { 
     tableLayoutPanel1.SetRowSpan(control, 1); 
    } 
} 
+1

toller Code. Visual Studio Designer führt mich in die Irre. Ich habe in den Eigenschaften von Button1 gesucht, habe versucht, Button1 zu Toolstipanel Element und so weiter zu werfen ... Danke! –

+0

Wenn Sie in Form.Designer.cs statt Visual Designer gesucht hatten, hatten Sie die Lösung direkt gefunden. ;-) – Oliver

+1

Ich weiß, dass es ein alter Post ist, aber ich möchte darauf hinweisen, dass Sie die "yoda conditions" in C# nicht machen müssen, da Statements stark typisiert sind. (Und ich glaube, wenn Sie einen Fehler mit Booleschen Werten machen und statt eines Vergleichs eine Zuweisung eingeben, wird eine Compiler-Warnung generiert, im Gegensatz zu dem Fehler, der mit einem anderen Typ generiert wird.) – MiffTheFox

2

Während ich finde, dass die aktuelle Abstimmung gut genug ist, scheint es auch etwas unordentlicher als nötig zu sein. Sie müssen die Steuerelemente zu TableLayoutPanel hinzufügen, bevor Sie ihre Eigenschaften festlegen.

Visual Studio (2013 und wahrscheinlich andere Versionen) werden diese Eigenschaften als Teil des Steuerelements anzeigen. In Wirklichkeit sind sie Teil des TableLayoutPanel.

Erläuterung:

tableLayoutPanel.Controls.Add(**control**, x, y) 
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span') 

Beispiel:

tableLayoutPanel1.Controls.Add(**button1**, 0, 0); 
tableLayoutPanel1.SetColumnSpan(**button1**, 2); 
tableLayoutPanel1.SetRowSpan(**button1**, 3); 

Ergebnis: Ein Knopf, der diesen Raum 'besetzt'. (Vorausgesetzt, es groß genug ist, um den Bereich zu decken. Auch wenn es nicht ‚Abdeckung‘ der Raum, wird es noch ‚Reserve‘ es.)

O O X X X 
O O X X X 
O O X X X 
X X X X X 
X X X X X 

Einstellen der Spannweite größer als die Größe des Gitters wird. .: NICHT die Rastergröße ändern. NICHT zuschneiden/bearbeiten Sie die Zahl auf die Größe des Rasters. NICHT einen Fehler bei der Kompilierung werfen.

Es wird fungieren/führen, als ob der Bereich auf das aktuelle Raster (TableLayoutPanel) maximale Größe festgelegt wurde. Dies ist nur relevant, wenn sich die TLP/Rastergröße ändert.

Wenn Sie zwei Steuerelemente zwei denselben Rasterstandort programmgesteuert hinzufügen, behält das erste Steuerelement in einem Raster seinen Speicherort bei. Jede nachträglich hinzugefügte Kontrolle wird zum nächsten Zellenblock geschoben. Wenn eine 'span' hinzugefügt wird, behandelt sie diesen Zellenblock wie gewohnt und sucht weiter nach einem unbenutzten Zellenblock.

Ex: label1, label2 und label3 werden auf 0,0 zugegeben.

  • label1 erscheint in 0,0
  • label2: 0,1
  • label3: 0,2

Ex 2: Etikett 1 hat eine Zeilenspanne von 2.

  • label1: 0,0
  • label2:
  • label3 bis 0,2 verlegt: 0,3

Nachdem Sie den richtigen Rasterpunkt und Spannweiten ausgewählt haben, können Sie dann weiter Optimieren Sie Ihr Layout mithilfe der Dock- und Ankereigenschaften.

Verwandte Themen