Creare in modo dinamico un bottone e una label in un panel

di ors il
7 risposte
Buongiorno a tutti,
vorrei riuscire a creare un panel, con all'interno un bottone e una label al di sotto del bottone ma sempre all'interno del panel; poi cliccando il pannello, devo prendere in considerazione il testo della label che è al suo interno.
Malgrado i miei sforzi, mi visualizza all'interno del panel o il bottone, o la label, ma non capisco l'errore, posto il codice:

                                public sub dinamic () 
                               Dim btn As New Button
                               Dim pannello As New Panel
                               Dim label As New Label
                                
                                pannello = New Panel
                                pannello.Height = 140
                                pannello.Width = 157.5
                                AddHandler pannello.Click, AddressOf MyPannello_Click
                                btn = New Button                   
                                btn.FlatAppearance.BorderSize = 3
                                btn.FlatAppearance.BorderColor = Color.Green
                                btn.FlatStyle = FlatStyle.Flat
                                btn.Height = 80 
                                btn.Width = 157.5  
                                pannello.Controls.Add(btn)
                                label = New Label
                                label.Font = New Font(label.Text, 5)
                                label.Text = "ciao"
                                pannello.Controls.Add(label)
                           end sub

7 Risposte

  • Ho il dubbio che il problema sia un altro, mi spiego meglio, ho provato a creare prima la la label, e poi il bottone all'interno del panel, e infatti mi crea tutti e due, il problema e che le dimensioni del panel si adattano alle stesse del bottone, senza lasciare spazio alla label. Ho provato a mettere la backcolor alla label di nero, e mi ritrovo il bottone e il panel della stessa misura, nonostante io gli abbia passato l'altezza molto superiore al bottone, è soprapposto al bottone il panel. ho messo backcolor alla label per vedere il punto dove l'ho creava. In poche parole non ce spazio per la label
  • Il panel deve essere abbastanza grande da accogliere entrambi , dai delle dimensioni fisse anche alla label in modo da capire quanto ,al minimo , deve essere grande il panel
  • Come non detto gian82, usando location non so perchè, ma si ritaglia il suo spazio e funziona. Ma fatto ciò nell'evento click del panel e del button, posso "prendere" il valore della label?
  • Grazie mille della risposta.
    Ho letto il post che mi ha messo, Control.ControlCollection.Find non l'avevo mai usata.
    Se non ho capito male, mi da la possibiltà di fare la ricerca in una raccolta di controlli figli.
    io ho provato a scrivere nell'evento click del panel:
    
      If pannello.Controls.Contains(btn) And pannello.Controls.Contains(label) Then
                btn = TryCast(sender, Button)
                label = TryCast(sender, Label)
      End If
    
    ma ogni volta che clicco mi esce errore dicendo che non li trova
  • Infatti la condizione risulta false, e non entra dell'if nonostante i controlli si trovino nel pannel appena cliccato.
    Ho provato a scrivere
    
       If pannello.HasChildren = True Then
                MsgBox("ho figli")
            Else
                MsgBox("non ho figli")
            End If
    
    e la condizione risulta true
Devi accedere o registrarti per scrivere nel forum
7 risposte