J'ai deux lignes et deux colonnes. Je veux que la dernière colonne des deux cellules se confondent. En raison d'exigences, je n'utilise pas d'autres options de conception, cela signifie deux tablelayouts dans lesquels la première mise en page de tableau comporte deux lignes.
| | |
| | |
| | |
|_______________________| |
| | |
| | |
| | |
http://msdn.Microsoft.com/en-us/library/system.windows.forms.tablelayoutpanel.aspx
Par exemple, vous pouvez définir la propriété RowSpan dans le contrôle TableLayoutPanel.
Voici comment le faire dans le code
//create a label control, add it to the tableLayoutPanel, and merge it into 3 cells.
Label lbl = new Label();
lbl.Location = new Point(0, 0);
lbl.Text = "This is a test label";
MyTableLayoutPanel.Controls.Add(lbl, 0,0); //start it in cell 0,0
MyTableLayoutPanel.SetColumnSpan(lbl, 3); //merge 3 columns
Vous pouvez regarder ici le titre de Merging Cells.
Au lieu de définir la propriété ColumnSpan / RowSpan , vous pouvez ajouter un TableLayoutPanel dans la cellule d'un autre TableLayoutPanel . Au lieu de fusionner deux cellules, vous divisez ensuite deux cellules. Dans l'exemple que vous donnez dans votre question, vous scinderiez la colonne de gauche en deux lignes au lieu de fusionner la colonne de droite en une seule ligne.
Cette méthode n’est avantageuse que si vous prévoyez de définir la propriété CellBorderStyle sur une valeur autre que " None ". J'ai trouvé cette réponse ici , où CSharpFreak suggère également une autre méthode, que je n'ai pas essayée.
Le code suivant devrait vous permettre d'étendre un contrôle sur le nombre souhaité de lignes/colonnes
TableLayoutPanel tableLayoutPanel1 = new TableLayoutPanel(); // not required if you already have the control added else where or in designer.
TextBox textBox1 = new TextBox(); // not required if you already have the control added else where or in designer.
tableLayoutPanel1.Controls.Add(textBox1);// not required if you already have the control added else where or in designer.
tableLayoutPanel1.SetColumnSpan(textBox1, 2);
tableLayoutPanel1.SetRowSpan(textBox1, 2);
Définissez la propriété RowSpan du contrôle dans la cellule qui lancera la fusion dans la table. c'est-à-dire que RowSpan of 3 aura le contrôle remplir sa cellule et les 2 cellules ci-dessous.
ColumnSpan à fusionner à droite.
En code, appelez la méthode SetRowSpan et/ou SetColumnSpan.
Vous pouvez définir cette propriété de "fusion" sur le contrôle:
Supposons que le contrôle est une Label
et que vous souhaitez fusionner des lignes, vous pouvez le faire comme suit:
TableLayoutPanel table = new TableLayoutPanel();
Label lbl = new Label();
lbl.Text = "test";
lbl.Dock = DockStyle.Fill;
table.Controls.Add(lbl, 0, 0); //initial position
table.SetRowSpan(lbl,2);