Je construis un WinForm avec un certain nombre d'éléments dynamiques, et je pense avoir des problèmes avec la relation parent/enfant dans les contrôles imbriqués. Toutes les questions existantes que j'ai pu trouver semblaient exclusives à WebForms, ce qui n'était pas entièrement utile.Contrôles dynamiques imbriqués, utilisant des gestionnaires d'événements personnalisés
J'ai également eu quelques problèmes avec les contrôles personnalisés, mais cela peut être un problème connexe. J'essaie d'afficher un certain nombre de PictureBox, chacune avec un certain nombre de NUD associés. J'ai d'abord fait cela en faisant beaucoup de contrôles à la main, mais maintenant je veux automatiser le processus et réutiliser le code ailleurs.
Le code actuel est un peu plus compliqué que cela, mais voici les bits importants dans un mélange de pseudo-code et code réel
panel_book.Controls.Clear();
for (loop controls)
{
//INITIALIZE CHILD CONTROLS
PictureBox tempBox = new PictureBox();
NumericUpDown t1 = new NumericUpDown();
NumericUpDown t2 = new NumericUpDown();
NumericUpDown t3 = new NumericUpDown();
NumericUpDown t4 = new NumericUpDown();
tempBox.Image = getImage();
tempBox.Size = tempBox.Image.Size;
tempBox.Tag = getValue();
//THIS IS WHAT IS GIVING ME TROUBLE
//=======================================================
tempBox.MouseEnter += new EventHandler(Binder_MouseEnter);
tempBox.Click += new EventHandler(smallCardNew_Click);
//THINGS I'VE TRIED
tempBox.BringToFront();
tempBox.Focus();
t1.Size = new Size();
t2.Size = t1.Size; t3.Size = t1.Size; t4.Size = t1.Size;
t1.Location = new Point();
t2.Location = new Point(); t3.Location = new Point(); t4.Location = new Point();
t1.Value = 0;
t2.Value = 0; t3.Value = 0; t4.Value = 0;
t1.Enabled = true; t2.Enabled = true;
t3.Visible = false; t4.Visible = false;
//CREATE THE NEW PARENT CONTROL (PANEL)
Panel tempPanel = new Panel();
tempPanel.Margin = new Padding(0, 0, 0, 0);
tempPanel.Controls.Add(tempBox);
tempPanel.Controls.Add(t1);
tempPanel.Controls.Add(t2);
tempPanel.Controls.Add(t3);
tempPanel.Controls.Add(t4);
tempPanel.Size = new Size();
tempPanel.Location = new Point();
panel_book.Controls.Add(tempPanel);
}//end loop
///
void smallCardNew_Click(object sender, EventArgs e)
{
MessageBox.Show("Click Event Triggered");
}
void Binder_MouseEnter(object sender, EventArgs e)
{
MessageBox.Show("Mouse Enter Event Triggered");
}
Il faut espérer que c'était clair, juste au cas où il est important, voici un peu plus de fond .
J'ai un très grand FlowLayoutPanel qui contient des panneaux enfants. L'un de ces panneaux enfant est le domaine sur lequel je travaille actuellement. (appelé panel_book ci-dessus) ce panneau est ce que je suis en ajoutant dynamiquement des panneaux enfants avec les amis PictureBox &. Le plus ennuyeux est que les événements MouseEnter et Click ne sont pas déclenchés. Du tout. J'ai ajouté des gestionnaires d'événements à l'exécution avant, lorsque les contrôles n'étaient pas dynamiques, et n'ont jamais eu autant de problèmes. Je suis assez sûr que j'ai même fait cela avec des contrôles imbriqués. Enfin, j'ai envisagé de créer ce dernier panneau enfant dans son propre contrôle personnalisé, mais j'ai rencontré des problèmes similaires. Vraisemblablement, trouver la solution à ce problème va régler cela aussi, mais si vous savez que ce ne sera pas le cas, pourriez-vous me diriger dans la bonne direction?
Merci, :)