Tab control

lunedì 11 maggio 2009 - 21.14

netgit Profilo | Newbie

Ciao,
ho una classica form in binding con dei dati, per organizzarli vengono suddivisi in un tab control.
Mi sono accorto che accedendo alla propietà text di un controllo da un tab all'altro mi restituisce il corretto contenuto solo se sono sullo stesso tab altrimenti sempre blank.
Quanlcuno mi sa dire cosa sbaglio ?

freeteo Profilo | Guru

Ciao,
strano...gli elementi nella tab che hai aggiunto a design vengono tenuti tutti in memoria e resi accessibili normalmente come se fossero messi tutti sulla form principale.

Sei sicuro che in qualche selectIndexChanged non vai a modificarli (magari sbiancandoli) ?
Oppure li ricrei al volo?

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

netgit Profilo | Newbie

Inanzitutto grazie per l'attenzione,
se così fosse mi troverei anche il db con blank invece no.
E poi quando clicco sul tab il contenuto delle textbox è quello che mi aspetto e la proprietà haschanges non restituisce true cosa che dovrebbe se da qualche parte le sposrco con blank.
Il tutto l'ho scoperto proprio nella procedura di salvataggio, se ci sono modifiche controllo la validità dei dati, il tab in questione prima era quello di indice 0 quindi subito visibile al load della form.
Mi sembra di intuire che quando il tab non è attivo i suoi controlli vengono posti invisibili e uindi .text="".
Può essere ?

netgit Profilo | Newbie

Ho fatto quest'altra prova:
ho inserito nella form un pulsante che alla pressione mostra il contenuto della textbox inserita sul tab2 e mostra il contenuto della texbox solo quando il tab2 è visualizzato.
E' normale ?
Prima di inserire il tabcontrol di microsoft usavo quello di infragistic e ciò non succedeva.
Devo quindi comprare la licenza di infragistic ?

grazie

netgit Profilo | Newbie

Mi correggo
Ho fatto una prova reinserende il controllo della infragistic ed il problema rimane.
il controllo non lo viene portato a blank dal codice altrimenti in uscita la proprietà haschanges del dataset ritornerebbe true.
Sembra che il binding del controllo funzioni solo dopo che è stato visualizzato almeno una volta!
Non so più che pesci pigliare !!!
spero qualcuno riesca almeno a darmi la direzione dove cercare.

grazie

netgit Profilo | Newbie

Contro prova.
Nuova form nello stesso progetto
Uso lo stesso dataset
aggiungo dei campi trascinandoli sempre dal designer quindi dal tab del datasource
aggiungo il tabcontrol con due tab
un campo per tab
i due campi aggiunti ai tab li aggiungo anche alla form
per finire un bottone al toolstrip, che mostra con una msgbox prima i ccampi del tab
e poi gli stessi ma della form.
Il risultato è sempre lo stesso :
-la msgbox con i riferimenti dei campi dalla form scrive tutti e due i contenuti dei campi,
quella invece con i riferimenti dal tabcontrol mostra solo il contenuto del campo mostrato dal tab attivo.

Devo rinunciare ad usare il tabcontrol ?

freeteo Profilo | Guru

Ti ho allegato un esempio che fa quello che dici tu, ma da me funziona normalmente.

Prova da te se come da me scrivi il testo nella textbox presente nella prima Tab, e poi ti sposti nell'ultima e cliccando il bottone ti compare quello che hai scritto prima anche se la tab è diversa.
Ripeto da me funziona correttamente.

Casomai allega un progetto d'esempio anche tu che capisco meglio il problema.

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

alexmed Profilo | Guru

Ciao
Se non riesci a risolvere come ti ha suggerito freeteo.

Non sò se è l'unica soluzione, sicuramente è poco elegante, ma efficace.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice è in VB, ma si tratta di attivare, nell'evento load del form tutte le TabPages del TabControl.

Ciao


alexmed

netgit Profilo | Newbie

OK.
Ho fatto un altro esempio ed allego tutto:
db ms-sql2005 in bakup
e progetto vb
Purtroppo per me si comporta allo stesso identico modo ( speravo diversamente )

freeteo Profilo | Guru

Ciao da me non so come mai, ma funziona:

640x480 217Kb

ho installato il Sp1 di Visual Studio 2008 oltre ai vari windowsupdate...non so se sia un bug del framework, cmq io ho tutte le versioni installate sulla mia macchina dalla 1.1 alla 3.5.

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

netgit Profilo | Newbie

Operativamente il test non va eseguito così.
Con la maschera a video, senza cambiare tab, da me, se clicco sul pulsante test i campi del tab non attivo non vengono visualizzati.

Se passo quindi attivo sequenzialmente tutti i tab il test li visualizza, sembra che i campi dei tab vengano fillati solo se il tab viene visualizzato.

grazie

netgit Profilo | Newbie

Quindi, che tu sappia, il controllo contenuto nella tabpage viene fillato solo dopo che il tabpage è stato visualizzato?

alexmed Profilo | Guru

Ciao
La risposta stà qui:

http://msdn.microsoft.com/it-it/library/system.windows.forms.tabpage.aspx

Nota
I controlli contenuti in un oggetto TabPage non vengono creati e le associazioni ai dati in questi controlli non vengono attivate finché la scheda non viene mostrata.


Quindi come ti suggerivo sopra fai un ciclo al Load del form.

Ciao


alexmed

netgit Profilo | Newbie

e' proprio una pezza ma di quelle che si vedono !!@<_+[

Se non ho altre alternative mi adeguerò, come ormai da tempo faccio con gli strumenti di sviuppo microsoft !

ciao e grazie
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