Bonjour,

Je voudrais créer un contrôle utilisateur qui ouvre un Panel ( ou mieux, un TableLayout Panel) avec des contrôles dedans.
Ce contrôle utilisateur serait juste constitué d'un bouton qui, lorsqu'il est cliqué, afficherait le Panel. Comme par exemple un combobox affiche une liste drop-down quand on clique la flêche.
Ce Panel (ou TableLayoutPanel) doit pouvoir être "designé" dans ma solution.

J'ai fait un test. Le bouton BtnDropDown ouvre bien un Panel sur la forme contenant le UserControl ça, je sais faire mais, plutôt que de créer les contrôles en dynamique, je préférerais avoir un Panel "prédéfini" que je peux modifier en design.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Private Sub BtnDropDown_Click(sender As Object, e As EventArgs) Handles BtnDropDown.Click
        Dim frm As Form
        Static Show As Boolean
 
        frm = Me.ParentForm.FindForm
 
        Show = Not Show 
 
        ShowCalendar(Show , frm)
 
End Sub
 
Private Sub ShowCalendar(ByVal Show As Boolean, ByVal frm As System.Windows.Forms.Form)
        If Show Then
            Dim ctl As New Panel
 
            With ctl
                .Name = "xxx"
                .BorderStyle = BorderStyle.FixedSingle
                .Size = _size
 
 
                Dim pt As New Drawing.Point(Me.Left, Me.Top + Me.Height)
                .Location = pt
            End With
 
            AddControls(ctl)
 
            frm.Controls.Add(ctl)
 
        Else
            frm.Controls("xxx").Dispose()
        End If
 
End Sub
 
Private Sub AddControls(ctl As Panel)
        Dim btndwn As New Button With {.Name = "Btndwn", .Size = New Size(22, 22), .Text = "t", .Font = New Font("Wingdings 3", 10), .Left = 0, .Top = ctl.Height - 22}
        AddHandler btndwn.Click, AddressOf ClickHandler
        ctl.Controls.Add(btndwn)
 
        Dim btnup As New Button With {.Name = "Btnup", .Size = New Size(22, 22), .Text = "u", .Font = New Font("Wingdings 3", 10), .Left = ctl.Width - 22, .Top = ctl.Height - 22}
        ctl.Controls.Add(btnup)
 
 
       etc....etc....
End Sub
 
Private Sub ClickHandler(sender As Object, e As EventArgs)
        'pour faire quelque chose.....
End Sub
En fait je voudrais pouvoir remplacer la routine ShowCalendar par quelque chose du genre frm.controls.add(Popup)

Bref, dans ma solution "bibliotheque de classe", quel élément dois-je utiliser (je suis un peu perdu parmi toutes les possibilités de VS) pour que je puisse donc designer ce popup et comment l'appeler.


Autre question: comme vous voyez, pour "fermer" le popup, je fais un dispose du Panel (et donc de tous les contrôles s'y trouvant). C'est pas trop radical/dangereux?

Merci pour vos avis

Olivier