Azzerare Tutti i componenti

venerdì 02 maggio 2008 - 11.49

DrGonzo Profilo | Newbie

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

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

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

>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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5