Newsgroup: it.comp.lang.visual-basic
Titolo: .NET "Illuminare i campi"

Salve,
ho una form in 
VB.NET
 con una cinquantina di textbox. Vorrei far si che il
background color cambi al passaggio nel campo e ritorni normale all'uscita.
Con gli eventi Enter e Leave tutto funziona ma vorrei sapere se c'è un modo
per evitare di dover scrivere una serie infinita di Enter/Leave.
Grazie


Mostra quel pezzo di codice che vediamo che si puo' fare... tipo dammi un
enter e un leave
--------------------------------
Inviato via 
http://usenet.libero.it

Non ce l'ho sotto mano comunque è qualcosa del genere:
Private Sub TexBox1_Enter...
    TextBox1.Backgroundcolor = ... giallo ...
End sub
Private Sub TexBox1_Leave...
    TextBox1.Backgroundcolor = ... bianco ...
End sub
Il problema è solo che devo ripetere per cinquanta volte lo stesso codice
editando Enter/Leave di ogni singola TextBox.


 per evitare di dover scrivere una serie infinita di Enter/Leave.
E' piů semplice che posti il codice, che la spiegazione.
Nell'evento Load del Form
 backColorModifica(Me)
In un modulo:
'*** Modifica il colore dello sfondo TextBox
    Public Sub backColorModifica(ByVal frm As Windows.Forms.Form)
        Dim ctrl As Control
        For Each ctrl In frm.Controls
            If (TypeOf ctrl Is TextBox) Then
                AddHandler ctrl.Enter, AddressOf mouseEventeEnterBackColor
                AddHandler ctrl.Leave, AddressOf mouseEventeLeaveBackColor
            End If
        Next
    End Sub
 Private Sub mouseEventeEnterBackColor(ByVal sender As Object, ByVal e As
System.EventArgs)
        DirectCast(sender, Control).BackColor = Color.Yellow
    End Sub
    Private Sub mouseEventeLeaveBackColor(ByVal sender As Object, ByVal e As
System.EventArgs)
        DirectCast(sender, Control).BackColor = Color.White
    End Sub
Puň essere che inserito in una maschera Master e conseguente ereditata; il
codice č digitato una sola volta per tutto il proggetto.
giuseppeD

 wrote in message news:bglb23

Con .NET puoi assegnare la stessa procedura di evento a più oggetti, quindi
niente 50 eventi.
Controlla nel codice generato da VB per il disegno del form: troverai anche
la linea dove viene assegnato l'evento.
Basta mettere per tutti la stessa procedura.
Credo si possa fare anche direttamente a design dalla finestra delle
proprietà.
Ciao
--
Math Parser, VB.Framework : 
http://www.neodatatype.net
Sito Comune               : 
http://www.it-lang-vb.net


Allora prima cosa lavora sul focus... elimini meta righe di codice....
Poi lavora sul focus..
Dichiara una varibile globale:
Dim textbox_precedente as Textbox
Fai una procedura cosi'
sub cambia_colore(Txt as textbox)
   if not isnull(textbox_precedente) 'o nothing bho prova
        textbox_precedente.colore(non mi ricordo il metodo) = bianco
   end if
  textbox_precedente = txt
txt.colore = giallo
end sub
nel get_focus chiami la procedura e gli dai come argomento quella textbox
tipo ma non mi ricordo l'evento
private sub textbox1_getfocus(.-...)
  cambia_colore(textbox1)
end sub
dovrebbe andare a dovere :)
ciao


 ha scritto nel messaggio
news:bglb23$njs$1...@grillo.cs.interbusiness.it...

Oltre alla soluzione di usare un unico gestore di evento, puoi anche
risolvere il problema in maniera piu' radicale, derivando una nuova classe
da TextBox.
Per esempio:
imports System.Drawing
Public Class TextBoxHighlight
    Inherits System.Windows.Forms.TextBox
    'una nuova property con il colore da impostare quando il controllo
    'e' attivo, usiamo come default il classico "giallino"
    Private mHighlightColor As System.Drawing.Color = Color.LightYellow
    Public Property HighlightColor() As Color
        Get
            HighlightColor = mHighlightColor
        End Get
        Set(ByVal Value As Color)
            mHighlightColor = Value
        End Set
    End Property
    Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
        Me.BackColor = HighlightColor
        MyBase.OnEnter(e)
    End Sub
    Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
        'ripristiniamo il default; nel caso il textbox avesse
        'un backcolor personalizzato, e' sufficiente aggiungere
        'un campo privato sempre di tipo Color, salvare il valore in OnEnter
        'e ripristinarlo qui.
        Me.BackColor = SystemColors.Window
        MyBase.OnLeave(e)
    End Sub
End Class
a questo punto puoi usare questo controllo in luogo del normale textbox e
non hai nessun codice da gestire nelle form.
Un trucco rapido per poterlo utilizzare anche in design time senza
compilarlo come controllo aggiuntivo a parte e' questo:
fai il build del progetto, in modo che la nuova classe sia generata, quindi
apri il codice della form e sostituisci il tipo originale con il tuo nuovo
tipo in tutte le le dichiarazioni del tipo
'era System.Windows.Form.TextBox
Friend WithEvents TextBox1 As TextBoxHighlight
e all'inizio di InitializeComponent tutti i
Me.TextBox1 = New TextBoxHighlight
Ora se ritorni in design vedrai che puoi lavorare come al solito, e nella
finestra delle property compare anche la nuova HighLightColor
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Perfetto! Ho creato anche altre classi con lo stesso procedimento per le
combo e le checkbox e funziona a meraviglia!
Grazie - Alessio

 ha scritto nel messaggio
news:gdtXa.35515$sj6.7...@tornado.fastwebnet.it...

GRANDEE!!  POSSO NOLEGGIARTI UNA SETTIMANA PER UN CORSO PRIVATO?? ;-)

Funziona tutto perfettamente a parte una cosa... ho notato più di una volta
che il codice Friends WithEvents (che mi permette di far funzionare gli
eventi dell'oggetto) viene automaticamente cambiato in Friends e quindi non
mi considera tutte gli eventi legati all'oggetto stesso.
Ti è capitato qualcosa di simile?