+ Rispondi al messaggio
Pagina 1 di 4 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 35

Istruzioni su serie di controlli

  1. #1
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao a tutti,
    in una form ho un certo numero di textbox.
    Hanno tutte il colore di sfondo di default.
    Vorrei che, selezionandone una, tutte cambiassero il colore del fondo.
    Come fare a cambiarlo lo so, ma il mio problema è questo:
    Vorrei evitare di scrivere una sub per ogni controllo in modo che al getfocus mi cambi il colore di tutti i controlli.
    (Con VB6 bastava creare un array di controlli e il gioco era fatto...).
    Esiste un modo comodo per fare lo stesso con VB.NET?
    Spero di essere stato sufficientemente chiaro...
    ℹ️ Leggi di più su cippalippa ...

  2. #2
    L'avatar di chico_
    chico_ non è in linea Topo di biblioteca Ultimo blog: Attacco a Oscommerce
    Post
    2,056
    Blogs
    4
    Like Inviati  
    0
    Like Ricevuti  
    0
    Basandomi su un esempio di Cteniza per pulire tutte le TextBox puoi fare cosi':

    Public Class Form1
    
        Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
            TextBoxesAllColor(Me)
        End Sub
    
        Private Sub TextBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.GotFocus
            TextBoxesAllColor(Me)
        End Sub
    
        Private Sub TextBox3_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3.GotFocus
            TextBoxesAllColor(Me)
        End Sub
    
        Private Sub TextBox4_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox4.GotFocus
            TextBoxesAllColor(Me)
        End Sub
    
        Public Sub TextBoxesAllColor(ByVal ctl As Control)
            Dim tb As TextBox = TryCast(ctl, TextBox)
            If tb IsNot Nothing Then
                tb.BackColor = Color.YellowGreen
            ElseIf ctl.Controls.Count > 0 Then
                For k As Integer = 0 To ctl.Controls.Count - 1
                    TextBoxesAllColor(ctl.Controls(k)) 'ricorsione
                Next
            End If
        End Sub
    
        
    End Class
    
    Ciauz

    Chico
    ℹ️ Leggi di più su chico_ ...

  3. #3
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao Massimo, vediamo se riesco a darti una mano.
    Dunque, premesso che puoi comunque creare array di controlli, ma da codice, per gestire un gruppo di textbox come se fossero in un array, il problema è come aggiungercele. In pratica se tutte le textbox di un certo controllo contenitore (Form, Panel...) devono essere 'trattate' nel solito modo, allora puoi semplicemente fare una ricerca del tipo di controllo e applicare a tutte le stesse procedure. Eventualmente applicando una logica di ricerca anche per i controlli a loro volta contenuti e contenitori anch'essi (es. un Panel contenente Textbox e contenuto a sua volta in una Form). Se il problema è che solo alcune debbono essere trattate insieme, allora ti suggerisco di inserirle tutte in una 'generics', una volta per tutte magari nel Load della Form, così da realizzare, in pratica, il tuo 'array di controlli'. Il modo per discriminare quali fanno parte del gruppo, potrebbe essere qualcosa contenuto nel nome del controllo (es. "TxtG01Indirizzo") dove potresti identificare il tipo di controllo (per l'ordine nell'intellisense) con "Txt" e il gruppo di appartenenza con "Gxx" (100 possibili gruppi). Dal settimo carattere in poi, identifichi la funzione della textbox. Io comunque, in genere, uso il TAG per mettere informazioni su come deve essere trattato il controllo e non il nome. Una volta che passi per la routine di aggiunta alla/e generics, devi usare lo stesso tipo di logica iterativa per la ricerca in tutti i contenitori e sottocontenitori, per scovare le textbox che dovrai aggiungere e procedere di conseguenza.
    Una volta fatto ciò, con un ciclo for-each, potrai applicare la stessa procedura a tutte le textbox di un gruppo.

    P.S.: Cross Posting con Chico !
    Ultima modifica di alextyx; 24-08-2007 12:04 
    ℹ️ Leggi di più su alextyx ...

  4. #4
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao Francesco, volevo evitare il tuo sistema perchè, come vedi, richiede di scrivere una sub per ogni controllo... e siccome i controlli sono tanti, non mi passa più! (Equivale a dire: da quanti sono, non finirò mai...).
    L'idea di Ale non mi dispiace. Se includo i controlli nella collection, poi li posso richiamare SIA in modo tradizionale CHE come elementi di una matrice?
    ℹ️ Leggi di più su cippalippa ...

  5. #5
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    L'idea di Chico, mi pare differisca dalla mia più che altro per il fatto che non prevede di organizzare sottogruppi di uno specifico tipo di controllo, tuttavia, se sei certo che tutti i tuoi controlli abbiano una certa proprietà (mi pare che TAG, ad esempio, essendo già presente in Object, sia comune a tutti) puoi agirci ciclando su tutti i controlli senza distinguere fra i vari tipi, altrimenti devi testare il tipo, oppure i suoi membri (tramite reflection).
    Io ti avevo suggerito una Generics che è tipizzata. Se vuoi creare una collezione di un certo numero di controlli di tipi vari, allora puoi usare anche un arraylist, che lavora con tipi object, ma poi dovresti effettuare gli opportuni casting, ove necessari.
    ℹ️ Leggi di più su alextyx ...

  6. #6
    L'avatar di Cteniza
    Cteniza non è in linea Amanuense
    Post
    4,378
    Blogs
    36
    Like Inviati  
    0
    Like Ricevuti  
    0
    Un'altra possibiltà è "ereditare" da textbox e inserire nella classe tutti gli aggiornamenti che ti servono.
    ℹ️ Leggi di più su Cteniza ...

  7. #7
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    E' proprio vero che il bisogno aguzza l'ingegno...
    Ho trovato una soluzione più furba e più corta di quelle che mi avete proposto voi!
    Public Class Form1
        Private Sub TB_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus, TextBox3.GotFocus
            TextBox1.BackColor = Color.Black
            TextBox2.BackColor = Color.Black
            TextBox3.BackColor = Color.Black
        End Sub
    End Class
    
    Mi è tornato in mente che le sub possono essere gestire da più controlli contemporaneamente...

    LO VEDI LUCIANO CHE STUDIO!?!
    ℹ️ Leggi di più su cippalippa ...

  8. #8
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Post
    2,600
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ho trovato una soluzione più furba e più corta di quelle che mi avete proposto voi!
    Non ho parole...delinquente che non sei altro!
    Cioè, appena arrivi su una di quelle tre textbox, tutte e tre devono diventare nere?
    Se questo era tutto il tuo problema.....
    Se poi, raffinatamente, volessi cambiare il colore solo di quella su cui ti sei posizionato, allora basterebbe che tu cambiassi il colore dell'oggetto 'sender', che altri non è che la textbox che ha ricevuto il focus.
    Per farti perdonare, almeno in parte, questa discussione, come minimo dovrai pagare il conto della prossima pizza!
    ℹ️ Leggi di più su alextyx ...

  9. #9
    L'avatar di Cteniza
    Cteniza non è in linea Amanuense
    Post
    4,378
    Blogs
    36
    Like Inviati  
    0
    Like Ricevuti  
    0
    LO VEDI LUCIANO CHE STUDIO
    E qui che ti sbagli lo devi fare per te non per accontentare me.
    Anche la scelta di fare utilizzare un unico evento non è poi una soluzione "ottimale", questo perchè ti costringe a scrivere continuamente del codice per personalizzare la tua cosa.
    Invece, seguendo il mio suggerimento, ti avresti potuto fare un textbox personalizzato ed esporre delle proprietà nel designer come ad esempio:
    ColorePersonalizzato (di tipo color)
    AttivaColorazione (boolean, per utilizzare sempre il tuo textbox personalizzato)
    Una gestione dell'evento dall'interno facendo l'override del metodo ereditato
    Questo ti portava ad avere nella casella degli strumenti un controllo che potevi trascinare nel desktop ed utilizzare senza scrivere del codice.
    ---
    Anche la scelta del metodo "gotfocus" deriva da vb6 ma, come puoi vedere gotfocus e enter (quello che avresti dovuto usare) scatta anche quando non vorresti.
    Se guardi questo post sul mio blog
    Evento GotFocus perchè in VB.NET compare ed è nascosto in C#?
    Scoprirai che l'evento GotFocus scatta anche quando cambi la form attiva.
    ℹ️ Leggi di più su Cteniza ...

  10. #10
    L'avatar di cippalippa
    cippalippa non è in linea Topo di biblioteca
    Post
    2,526
    Like Inviati  
    0
    Like Ricevuti  
    0
    Forse ho parlato troppo presto...
    Mi sapete spiegare perchè questi due codici funzionano quando sono da soli, mentre se li unisco si blocca tutto?

    Per Luciano: Io non studio per accontentare te, ma per CERCARE di riuscire a fare quello che mi propongo...
    Ora guardo l'indirizzo che mi hai passato.

    Public Class Form1
        Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus, TextBox3.GotFocus, TextBox4.GotFocus
            TextBox1.BorderStyle = BorderStyle.FixedSingle
            TextBox2.BorderStyle = BorderStyle.FixedSingle
            TextBox3.BorderStyle = BorderStyle.FixedSingle
            TextBox4.BorderStyle = BorderStyle.FixedSingle
        End Sub
    End Class
    
    FUNZIONA

    Public Class Form1
        Private Sub TextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus, TextBox2.LostFocus, TextBox3.LostFocus, TextBox4.LostFocus
            TextBox1.BorderStyle = BorderStyle.None
            TextBox2.BorderStyle = BorderStyle.None
            TextBox3.BorderStyle = BorderStyle.None
            TextBox4.BorderStyle = BorderStyle.None
        End Sub
    End Class
    
    FUNZIONA

    Public Class Form1
        Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus, TextBox2.GotFocus, TextBox3.GotFocus, TextBox4.GotFocus
            TextBox1.BorderStyle = BorderStyle.FixedSingle
            TextBox2.BorderStyle = BorderStyle.FixedSingle
            TextBox3.BorderStyle = BorderStyle.FixedSingle
            TextBox4.BorderStyle = BorderStyle.FixedSingle
        End Sub
        Private Sub TextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus, TextBox2.LostFocus, TextBox3.LostFocus, TextBox4.LostFocus
            TextBox1.BorderStyle = BorderStyle.None
            TextBox2.BorderStyle = BorderStyle.None
            TextBox3.BorderStyle = BorderStyle.None
            TextBox4.BorderStyle = BorderStyle.None
        End Sub
    End Class
    
    NON FUNZIONA

    Per Alessandro: Potrebbe essere colpa del sender?
    Fa confusione quando seleziono un oggetto che ha sia il got che il lost focus.
    ℹ️ Leggi di più su cippalippa ...

+ Rispondi al messaggio
Pagina 1 di 4 123 ... ultimoultimo

Potrebbero interessarti anche ...

  1. Funzione che non esegue le istruzioni
    Da sistemista nel forum Visual Basic .Net
    Risposte: 13
    Ultimo Post: 23-12-2020, 19:19
  2. Problema istruzioni
    Da antonio_81 nel forum ASP 3, ASP .Net
    Risposte: 1
    Ultimo Post: 13-11-2020, 12:58
  3. Istruzioni fields e findfirst
    Da BennyB nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 16-05-2014, 09:04
  4. Esecuzione automatizzata istruzioni del programma
    Da _xXx_ nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 20-02-2011, 18:21
  5. istruzioni su powerpoint.
    Da mandrak nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 10-10-2010, 22:32