Création d'un bouton dans une DLL

Création d'un bouton dans une DLL - C#/.NET managed - Programmation

Marsh Posté le 22-12-2017 à 15:21:03    

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 :
  1. public partial class Form1 : Form
  2. {
  3.     ButtonNUD.MyNUD Nud;
  4.     public Form1()
  5.     {
  6.         InitializeComponent();
  7.         ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1);
  8.     }
  9. }


Ce qui exécute le code dans ma DLL:

Code :
  1. public class MyNUD
  2. {
  3.     private MyForm form;
  4.     public MyNUD(Panel parent)
  5.     {
  6.         if(form == null)
  7.         {
  8.             form = new MyForm();
  9.             form.Enabled = true;
  10.             form.AutoSize = true;
  11.             form.TopLevel = false;
  12.             form.Dock = DockStyle.Fill;
  13.             parent.Controls.Add(form);
  14.         }
  15.         form.Show();
  16.     }
  17. }


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 :
  1. public partial class Form1 : Form
  2. {
  3.     ButtonNUD.MyNUD Nud;
  4.     public Form1()
  5.     {
  6.         InitializeComponent();
  7.         ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1); // Ne fonctionne pas
  8.     }
  9.     private void button1_Click(object sender, System.EventArgs e)
  10.     {
  11.         ButtonNUD.MyNUD Nud = new ButtonNUD.MyNUD(panel1); // Fonctionne
  12.     }
  13. }


Est-ce que vous avez une idée de pourquoi cela ne fonctionne pas dès le démarrage ?  


---------------
Corvette C5 Coupé owner
Reply

Marsh Posté le 22-12-2017 à 15:21:03   

Reply

Marsh Posté le 22-12-2017 à 19:04:43    

Problème résolu, il ne faut pas passer par une classe qui construit MyForm, mais directement utiliser la classe MyForm.


---------------
Corvette C5 Coupé owner
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed