Bonjour à vous,
Je crée une interface C# en utilisant les WinForms.
Je souhaite ajouter un Widget personnalisé à une Form. Ce widget est similaire à un NumericUpDown, mais adapté pour des écrans tactiles, c'est à dire que mon bouton est composé d'un TextBox, d'un gros bouton "+" et d'un gros bouton "-".
Pour mes tests, j'ai:
- Une interface simple constitué d'une Form et d'un Panel à l'intérieur de la Form: Form1.
- Ma DLL contenant mon bouton personnalisé: MyNUD. Ce bouton est crée à l'intérieur d'une Form MyForm sans bords.
Du coup, dans l'interface j'inclus ma DLL et dans le constructeur j'exécute le code suivant:
Code :
- public partial class Form1 : Form
- {
- ButtonNUD.MyNUD Nud;
- public Form1()
- {
- InitializeComponent();
- ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1);
- }
- }
|
Ce qui exécute le code dans ma DLL:
Code :
- public class MyNUD
- {
- private MyForm form;
- public MyNUD(Panel parent)
- {
- if(form == null)
- {
- form = new MyForm();
- form.Enabled = true;
- form.AutoSize = true;
- form.TopLevel = false;
- form.Dock = DockStyle.Fill;
- parent.Controls.Add(form);
- }
- form.Show();
- }
- }
|
Là ou ça pose problème, c'est que le bouton n’apparaît pas dans ma Panel. Même en exécutant les méthodes .Update() ou .Refresh() sur le Panel ou la Form1.
Par contre, en ajoutant un bouton dans la Form1 à côté de mon panel et que sur l'événement Click de ce bouton j'insère l'appel du constructeur de ma DLL, MyNUD s'affiche correctement.
Code :
- public partial class Form1 : Form
- {
- ButtonNUD.MyNUD Nud;
- public Form1()
- {
- InitializeComponent();
- ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1); // Ne fonctionne pas
- }
- private void button1_Click(object sender, System.EventArgs e)
- {
- ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1); // Fonctionne
- }
- }
|
Est-ce que vous avez une idée de pourquoi cela ne fonctionne pas dès le démarrage ?
---------------
Corvette C5 Coupé owner