Dimensionnement TableLayoutPanel
Je ne peut pas utiliser le droit de contrôle de ce que je veux. Je suis pour le remplissage d'un tableau avec les contrôles et je veux que chaque colonne de taille automatiquement pour les commandes contenues à l'intérieur d'elle. Par exemple, une colonne de zones de texte sera plus large qu'une colonne de cases à cocher. Je ne veux pas jouer avec mesure si je peux l'aider, en raison de la complexité des différents systèmes d'exploitation, les différents DPI, les différentes polices de caractères, etc. La table peut étendre horizontalement pour ajuster les contrôles, avec une barre de défilement. Comment est-ce possible avec un TableLayoutPanel - ou un autre contrôle?
Grâce.
Édité pour ajouter le code:
private void UpdateLocations()
{
tableLayoutPanel1.RowCount = CurrentSchedule.location.Length + 1;
tableLayoutPanel1.ColumnCount = 7;
int row = 1;
int timeWidth = TextRenderer.MeasureText("00:00:00x", tableLayoutPanel1.Font).Width;
Label lab = new Label();
lab.Text = "Location";
tableLayoutPanel1.Controls.Add(lab, 0, 0);
lab = new Label();
lab.Text = "Arrive";
tableLayoutPanel1.Controls.Add(lab, 1, 0);
lab = new Label();
lab.Text = "Depart";
tableLayoutPanel1.Controls.Add(lab, 2, 0);
lab = new Label();
lab.Text = "Pass?";
tableLayoutPanel1.Controls.Add(lab, 3, 0);
lab = new Label();
lab.Text = "Path";
tableLayoutPanel1.Controls.Add(lab, 4, 0);
lab = new Label();
lab.Text = "Plat";
tableLayoutPanel1.Controls.Add(lab, 5, 0);
lab = new Label();
lab.Text = "Line";
tableLayoutPanel1.Controls.Add(lab, 6, 0);
foreach (location loc in CurrentSchedule.location)
{
TextBox tb = new TextBox();
tb.Text = loc.locationID;
tableLayoutPanel1.Controls.Add(tb, 0, row);
tb = new TextBox();
tb.Text = loc.arrivalTime;
tb.Width = timeWidth;
tableLayoutPanel1.Controls.Add(tb, 1, row);
tb = new TextBox();
tb.Text = loc.departureTime;
tb.Width = timeWidth;
tableLayoutPanel1.Controls.Add(tb, 2, row);
CheckBox cb = new CheckBox();
cb.Checked = loc.passingTime;
tableLayoutPanel1.Controls.Add(cb, 3, row);
tb = new TextBox();
tb.Text = loc.pathCode;
tableLayoutPanel1.Controls.Add(tb, 4, row);
tb = new TextBox();
tb.Text = loc.platformCode;
tableLayoutPanel1.Controls.Add(tb, 5, row);
tb = new TextBox();
tb.Text = loc.lineCode;
tableLayoutPanel1.Controls.Add(tb, 6, row);
row++;
}
/*for (int idx = 0; idx < tableLayoutPanel1.RowCount; idx++)
{
tableLayoutPanel1.RowStyles[idx].SizeType = SizeType.AutoSize;
}
for (int idx = 0; idx < tableLayoutPanel1.ColumnCount; idx++)
{
tableLayoutPanel1.ColumnStyles[idx].SizeType = SizeType.AutoSize;
}*/
}
(Oui, il doit lourd refactoring - je suis juste essayer de l'obtenir pour travailler d'abord)
Le commentaire sur les bits de cause en dehors des limites des exceptions, même si logiquement (pour moi), il ne devrait pas. La gamme semble limité à ce que j'ai défini au moment de la conception, et non pas au moment de l'exécution.
source d'informationauteur GeoffM
Vous devez vous connecter pour publier un commentaire.
Désolé, mais quel est le problème avec le fait d'avoir les colonnes Autosize? C'est ce que TableLayoutPanel n', la taille des colonnes de l'ajustement des commandes à l'intérieur. L'expansion de la table et d'avoir une barre de défilement vous obligerait à définir les tables de la propriété Autosize à true, alors s'asseoir à la TableLayoutPanel au sein d'un autre groupe qui a les barres de défilement est activé. Mais la colonne de dimensionnement devrait fonctionner hors de la boîte, si si je ne suis malentendu à vos exigences.
Juste pour être sûr, vous allez les colonnes de la propriété et de la définition de chaque colonne SizeType à AutoSize droit? Pas seulement la propriété AutoSize de la table elle-même?
est-ce que vous souhaitez?
-Code postal:
Merci pour le code. Je suggère que vous utilisez le concepteur à faire beaucoup de ce. Au moins pour configurer les colonnes, les mettre à autosize, et ajouter la rubrique labels.
Vous pourriez également vouloir vérifier le contrôle Datagrid et liez-le à votre liste emplacement.
Pour obtenir cette méthode de travail:
1) la raison de votre colonnes de regarder la même taille est parce que l'intitulé des étiquettes que vous utilisez ne sont pas de redimensionnement automatique. Ils sont tous de x pixels de large et c'est l'étirement de la colonnes. Ce faire:
Vous devez également définir la propriété AutoSize de vrai sur le contrôle de Case à cocher et d'autres labels vous ajoutez en tant que contenu.
2) de fixer le nombre de lignes et ColumnCount n'affectera pas le RowStyles ou ColumnStyles collection. Vous avez 7 Colonnes, mais seulement 2 ColumnStyles. Essayez:
Seule autre chose à considérer est que certains contrôles seront pas alignés dans les lignes (les étiquettes apparaissent trop élevés par exemple). Pour corriger cela définissez la propriété de Marge, normalement à 3,6,3,0 afin de les aligner avec les zones de texte et des cases à cocher, etc.
Vous aurez besoin pour gérer le ControlAdded événement, puis redimensionner la colonne si le nouveau contrôle de la largeur est plus grande que la largeur de la colonne...
Vous dites que vous ne voulez pas jouer avec mesure, mais si vous êtes le redimensionnement, vous sorte de. Polices et tel ne devrait pas y entrer si vous êtes prudent sur la propriété TextAlign de vos cases à cocher, etc...
Vous pouvez utiliser plusieurs splitContainers l'un dans l'autre. Mais ne pas utiliser de nombreuses les panneaux imbriqués, vous pouvez redimensionner/redessiner des questions comme cette.
Vous pouvez trouver de nombreux exemples si vous voulez utiliser SplitContainer.