Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.NET] Recuperare tutti i controlli Textbox di My.Application

    Ciao, vorrei che per tutte le textbox presenti nella mia applicazione, nell'evento GotFocus cambi il colore BackColor evidenziando così il campo attivo e al contempo vorrei però evitare di scrivere due routine per ogni textbox, una per GotFocus e una per LostFocus che faccia ritornare il colore originario.

    Quindi vorrei ciclare tutti i Controls della mia appliucazione e se questi sono Textbox impostare la routine per il controllo del backcolor che in linea di principio non dovrebbe essere un problema.

    Puo andarmi bene anche ciclare tutte le textbox presenti in una form, potrei farlo nell'evento Load di ogni form.

    Problema: Non riesco ad ciclare tutte le textbox.

    Ciao

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    VB
    ---
    1. Public Sub New()
    2. InitializeComponent()
    3.
    4. For Each control As Control In Me.Controls
    5. Dim ctrlCurrent As TextBox = TryCast(control, TextBox)
    6. AddHandler ctrlCurrent.GotFocus, AddressOf ctrlCurrent_GotFocus
    7. AddHandler ctrlCurrent.LostFocus, AddressOf ctrlCurrent_LostFocus
    8. Next
    9. End Sub
    10.
    11. Private Sub ctrlCurrent_LostFocus(ByVal sender As Object, ByVal e As EventArgs)
    12. TryCast(sender, Control).BackColor = Color.White
    13. End Sub
    14.
    15. Private Sub ctrlCurrent_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
    16.
    17. TryCast(sender, Control).BackColor = Color.GreenYellow
    18. End Sub

    C#
    ---
    public Form1()
    {
    InitializeComponent();

    foreach (Control control in this.Controls)
    {
    TextBox ctrlCurrent = (control as TextBox);
    ctrlCurrent.GotFocus += new EventHandler(ctrlCurrent_GotFocus);
    ctrlCurrent.LostFocus += new EventHandler(ctrlCurrent_LostFocus);
    }
    }

    void ctrlCurrent_LostFocus(object sender, EventArgs e)
    {
    (sender as Control).BackColor = Color.White;
    }

    private void ctrlCurrent_GotFocus(object sender, EventArgs e)
    {
    (sender as Control).BackColor = Color.GreenYellow;

    }
    I got the remedy

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    1. Public Sub New()
    2. InitializeComponent()
    3.
    4. For Each control As Control In Me.Controls
    5. Dim ctrlCurrent As TextBox = TryCast(control, TextBox)
    6. AddHandler ctrlCurrent.GotFocus, AddressOf ctrlCurrent_GotFocus
    7. AddHandler ctrlCurrent.LostFocus, AddressOf ctrlCurrent_LostFocus
    8. Next
    9. End Sub
    10.
    11. Private Sub ctrlCurrent_LostFocus(ByVal sender As Object, ByVal e As EventArgs)
    12. TryCast(sender, Control).BackColor = Color.White
    13. End Sub
    14.
    15. Private Sub ctrlCurrent_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
    16.
    17. TryCast(sender, Control).BackColor = Color.GreenYellow
    18. End Sub
    Non vorrei dire eresie ma questo codice funziona solo per i controlli inseriti direttamente nella Form, se tali controlli sono inseriti in un GroupBox o in altri controlli non funzion. Inoltre se ci sono altri controlli oltre alle TextBox si verificherà un'eccezione in quanto non è possibile convertire altri controlli in una textBox.

    Consiglio questo codice:

    codice:
     For Each c As Control In GetChildControls(Me)
                If TypeOf c Is TextBox Then
                    AddHandler c.GotFocus, AddressOf ctrlCurrent_GotFocus
                    AddHandler c.LostFocus, AddressOf ctrlCurrent_LostFocus
                End If
     Next
    
     Function GetChildControls(ByVal ctrl As Control) As Control()
            Dim controls As New ArrayList
            For Each c As Control In ctrl.Controls
                controls.Add(c)
                controls.AddRange(GetChildControls(c))
            Next
            Return DirectCast(controls.ToArray(GetType(Control)), Control())
        End Function
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    no, infatti hai ragione. era un semplice esempio per far capire come si può fare.

    cmq, se proprio vogliamo farla per bene in modo che sia utilizzabile in tutti i nostri progetti allora io avrei fatto un aspect

    I got the remedy

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    ... non vorrei dire eresie nemmeno io ma anche il tuo codice non funziona se ci sono GroupBox Inestati tra di loro
    Funziona benissimo anche se ci sono controlli annidati.........(uno dentro l'altro)
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da Pirelli72
    Funziona benissimo anche se ci sono controlli annidati.........(uno dentro l'altro)
    perchè hai corretto dopo
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.