web-dev-qa-db-fra.com

Comment fusionner deux cellules dans un tableau

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.

|                       |                    |
|                       |                    |
|                       |                    |
|_______________________|                    |
|                       |                    |
|                       |                    |
|                       |                    |
22
Abhijit Shelar

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.

4
Kamilos
  1. Mettez n'importe quel contrôle dans une cellule dans le concepteur de formulaire
  2. Sélectionnez le contrôle et affichez ses propriétés
  3. Recherchez la propriété "ColumnSpan" dans la section "Mise en page"
  4. Entrez l'étendue de colonne souhaitée pour cette valeur

Voir l'image pour l'illustration:

 enter image description here

26
Boris Zinchenko

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
6
NL3294

Vous pouvez regarder ici le titre de Merging Cells.

http://en.csharp-online.net/TableLayoutPanel

2
sinanakyazici

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.

1
GregNash

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

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.

0
mackjazzy

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