Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Azzerare Tutti i componenti
venerdì 02 maggio 2008 - 11.49
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
DrGonzo
Profilo
| Newbie
9
messaggi | Data Invio:
ven 2 mag 2008 - 11:49
Ciao a tutti...ho bisogno di una informazione o di una idea.
Il mio problema è semplice. Sto scrivendo un'applicazione multi-panel. E ogni volta che clicco su un pulsante devo rendere invisibili tutti i panel non interessati e rendere visibile il panel interessato. Per fare questo mi sono creato una funzione che rendere in pratica invisibili tutti i panel (che in quel momento siano o non siano visibili), cioè in pratica faccio anche istruzioni in più, perchè se un panel in quel momento non è visibile lo RI-rendo invisibile. E poi una volta che ho reso invisibili tutti, compreso il panel che invece dovrebbe vedersi, nella funzione del click del bottone, subito dopo la chiamata a questo metodo "Nascondi" scrivo l'istuzione per rendere visibile solo il panel che mi interessa.
In più ho anche un altro problema. Quando rendo visibile un certo panel, lui mi scrive nei vari TextBox dentro al panel, l'ultima cosa scritta. Mentre invece io li vorrei vuoti, così come sono all'avvio del programma. Visto che non mi va tanto di fare un altro metodo per ogni panel dove azzero tutti i contenuti dei vari controlli.
Avreste un'idea per fare queste due cose in maniera più semplice...specialmente per il secondo problema.
Grazie mille di una eventuale risposta
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
ven 2 mag 2008 - 17:16
ciao,
tipicamente puoi usare una funzione ricorsiva per fare queste operazioni "massive", senza stare li a scrivere 100naia di righe di codice.
Questo puoi farlo perche' ogni controllo ha un insieme "Controls" che puoi iterare, e cosi' facendo a seconda dei casi puoi fare l'azzeramento del suo contenuto, ad esempio guarda il listato 6 di questo mio articolo:
http://www.dotnethell.it/articles/FunzioniRicorsive.aspx
fa proprio quello che vuoi fare tu
Magari tu non partire da "this" che è tutta la form, ma parti dal tuo panel...
*ps:
quando rendi Enabled=false un contenitore, tutti i controlli in esso contenuti vengono disabilitati automaticamente, non occorre impostarlo uno per uno..
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
DrGonzo
Profilo
| Newbie
9
messaggi | Data Invio:
sab 3 mag 2008 - 15:49
Grazie tantissimo per la risposta. Veramente soddisfacente. Potresti togliermi una curiosità? Io adesso ho scritto il codice che mi hai postato, l'ho capito tranne per una cosa.
Usando la "variabile" control, ho visto che il visual studio non mi da errori, però non mi da neanche i metodi della stessa. E fino a qui nessun problema, perchè giustamente questa variabile deve poter cambiare metodi in base al controllo che assume. Ma quello che non capisco in realtà è come mai il visual studio non mi da errori.
Che cosa è control? è una collezione? mi puoi spiegare un pò cosa è questa cosa?
Grazie tanttissimo per una eventuale risposta
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 3 mag 2008 - 16:36
>Che cosa è control? è una collezione? mi puoi spiegare un pò
>cosa è questa cosa?
Control non è una "variabile" ma una classe, che è la classe base di tutti i controlli (Control appunto) delle applicazioni WindowsForm di .net.
Il suo duale è "WebControl" (che a sua volta eredita da un Control del namespace Web ma al momento ignoriamo questa cosa) la classe base per le applicazioni asp.net, ovvero Web.
E' una classe data dal framework, quindi diciamo "scritta a Redmond", sulla quale sono stati derivati tutti i controlli.
Questa tecnica è comune quando si vogliono unifiormare i comportamenti di tante diverse tipoligie di oggetti, ad esempio una proprieta' che trovi in Control è "Text", quindi tutti i controlli (che ovviamente ereditano da Control) hanno questa proprieta', solo che ad esempio la textbox la visualizza al suo interno, mentre la Form, la visualizza sulla caption della finestra...il comportamento come vedi è demandato al singolo controllo, ma la proprieta' è comune
Lo stesso ragionamento vale per gli eventi come "click", "drag over" etc...
E' un po come dire, "essere umano" è generico, "maschio" "femmina" sono 2 tipizzazioni, quindi se vuoi accedere alle proprieta' tipiche de della donna devi tipizzare...mentre sai gia' che esserndo un "essere umano", ha 2 gambe e 2 braccia etc...
Cmq se sopra control fai "tastoDx->go to Definition" vedi i "metadati" (ovvero solo le cose descrittive e non la reale implementazione) e quindi capisci tutto quello che arriva da Control, e quello che invece è proprio "Personalizzato" del controllo in questione.
Ad esempio il DatePicker è simile alla TextBox perche' ereditano da Control entrambi, ma la proprieta' "Value" non c'e' nella textBox, quindi, se devi recuperarla, devi controllare che quel "control" sia effettivamente una DateTimePicker e quindi castare, e recuperare da intellisense il valore.
Capito questo, il motivo per cui visual studio non ti da errore è proprio perche' sono tutti estensioni di Control, e quindi è sempre possibile "lavorare" con Classe da cui eridata un'altra classe (teoria dell Object Oriented Programming)
Come vedi pero', quando devi fare delle cose specifiche di quella sottoclasse, come ad esempio con la ComboBox, non puoi settare il text e basta, ma devi spostare l'indice per "pulirla", come vedi, ognuno ha i suoi comportamenti, e quindi devi portarti nella "tipizzazione" piu' stretta.
>Grazie tanttissimo per una eventuale risposta
di niente, siamo qui per questo
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !