Aligner l'ajouter dynamiquement des contrôles horizontalement et verticalement à l'intérieur d'un contrôle en c#, winforms
J'ai ce programme qui ajoute dynamiquement des pictureboxes se référant au nombre de président dans la base de données. Comment puis-je les mettre à l'intérieur de la zone de groupe et d'aligner les pictureboxes à l'intérieur de la zone de groupe? Et la zone de groupe devrait s'étirer si le pictureboxes sont nombreux.
J'ai ce code est devenu :
private void Form1_Load(object sender, EventArgs e)
{
conn.Open();
try
{
cmd = new SqlCommand("SELECT COUNT(Position) FROM TableVote WHERE Position='" + "President" + "'", conn);
Int32 PresCount = (Int32)cmd.ExecuteScalar();
TxtPresCount.Text = PresCount.ToString();
for (int i = 0; i < PresCount; ++i)
{
GroupBox PresGB = new GroupBox();
{
PresGB.Size = new Size(491, 152);
PresGB.Location = new Point(12, 12);
PresGB.Text = "President";
this.Controls.Add(PresGB);
PresGB.SendToBack();
PictureBox PresPB = new PictureBox();
PresPB.Location = new Point(80 + (150 * i) + 20, 50);
PresPB.Size = new Size(75, 75);
PresPB.BorderStyle = BorderStyle.Fixed3D;
PresPB.ImageLocation = "imgPath";
this.Controls.Add(PresPB);
PresPB.BringToFront();
};
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}
Je voudrais que la pictureboxes à être à l'intérieur de la zone et de les aligner à l'intérieur.
Vérifier le quai et les propriétés de l'ancre
mais j'ai ajouté le contrôle par programmation à pas dans la conception. comment dois-je faire ensuite?
Puis définir la propriété par programmation
Par exemple dans ce cas. Vous pouvez utiliser
Mais, j'ai essayé de mettre PresPB.Dock = DockStyle.Remplir; il a rempli tous les travers de la forme. Je veux qu'il soit dans la Zone de groupe seulement, comment dois-je faire?
mais j'ai ajouté le contrôle par programmation à pas dans la conception. comment dois-je faire ensuite?
Puis définir la propriété par programmation
Par exemple dans ce cas. Vous pouvez utiliser
PresPB.Dock = DockStyle.Left
Mais, j'ai essayé de mettre PresPB.Dock = DockStyle.Remplir; il a rempli tous les travers de la forme. Je veux qu'il soit dans la Zone de groupe seulement, comment dois-je faire?
OriginalL'auteur Lyndon Broz Tonelete | 2013-10-05
Vous devez vous connecter pour publier un commentaire.
Peut-être le
FlowLayoutPanel
contrôle déjà fait ce que vous essayez de faire. Il suffit de créer votre image de boîtes et de les ajouter à unFlowLayoutPanel
au lieu d'unGroupBox
.FlowLayoutPanel
organise automatiquement les commandes en lignes et/ou colonnes en fonction de la valeur de sesFlowDirection
de la propriété. EnsemblemyFlowLayoutPanel.FlowDirection = FlowDirection.TopDown
pour obtenir une verticale organisées la liste.Si vous ne voulez pas plusieurs lignes ou colonnes de la
WrapContents
valeur false à la propriété. Vous pouvez également définir laAutomatique
propriété sur true pour obtenir automatiquement des barres de défilement si les contrôles ne sont pas adaptés.Si vous préférez la frontière d'un
GroupBox
vous pouvez toujours mettre laFlowLayoutPanel
dans unGroupBox
.Pour régler l'espace entre les zones de l'image vous pouvez utiliser l'
Margin
propriété.Cela vous donne beaucoup de contrôle sur la mise en page et vous n'avez pas besoin de calculer les postes de contrôle. Aussi, si la taille de la
FlowLayoutPanel
change tout est réarrangé automatiquement.Mise à JOUR:
J'ai quelques remarques sur ton code:
Les accolades faire cela ressemble à la syntaxe d'un initialiseur d'objet - mais il ne l'est pas.
Vous devez supprimer les accolades.
La création de la zone de groupe est à l'intérieur de la boucle. Je doute que vous voulez une nouvelle zone de groupe pour chaque zone de l'image. C'est la raison pour laquelle vous ne voyez qu'une seule image. Chaque nouveau groupe de la boîte de masque toutes les précédentes.
Vous ajouter les zones de l'image à l'écran à la place de la zone de groupe.
Vous utilisez "cryptique" des noms.
PresGB
etPresPB
sont très susceptibles d'être échangés accidentellement. Les abréviations sont généralement un mauvais choix pour les noms.Vous n'avez pas besoin d'appeler
SendToBack
ouBringToFront
puisque vous ne voulez pas que les contrôles de chevauchement de toute façon.Je ne pense pas que
GroupBox
est un bon choix. Bien sûr, vous pouvez le rendre plus grand si le nombre d'images augmente, mais vous êtes limité par l'écran et vous n'obtenez pas scollbars si les zones de l'image ne correspondent pas. Utiliser unFlowLayoutPanel
. Il a tout de la "magie" que vous êtes à la recherche pour.Remplacer votre pour la boucle avec ce morceau de code:
J'ai ajouté un peu de code et aussi quelques commentaires de votre code.
merci beaucoup.. Vous êtes vraiment d'une grande aide.! 🙂
je me demande si je peux mettre de la dynamique radiobutton ci-dessous chacun de mes pictureboxes.. est-il possible?
Le contrôle RadioButton a un
Image
de la propriété que vous pouvez utiliser à la place des zones de l'image. LeCheckAlign
etImageAlign
propriétés de vous donner le contrôle sur la mise en page.OriginalL'auteur pescolino
Vous pouvez toujours déposer un contrôle sur votre formulaire, faites ce que vous voulez faire est alors de regarder le code généré par le concepteur pour voir comment le concepteur n' (dans le "Designer.cs" fichier). Derrière les coulisses, il est le chargement de tous les contrôles et le réglage de toutes les propriétés via le code.
Cela dit.
Garder à l'esprit qu'une fois que vous mettez votre picturebox à l'intérieur de la zone de groupe toutes les coordonnées sont relatives à la zone. Donc, "0,0" est le coin supérieur gauche de la zone de groupe, pas la forme.
Pour ancrer votre picturebox utiliser le code suivant (c'est juste une simple copie-coller de mon code généré par le concepteur, de sorte que vous pouvez nettoyer un peu):
Pour ancrer votre zone de l'image (de sorte qu'il remplit l'ensemble de contrôle contenant):
Vous devez également modifier cette ligne:
:
OriginalL'auteur Zippit