[Vb.net]Probleema strano sulle Form

giovedì 08 luglio 2004 - 08.35

Andy Profilo | Senior Member

Ciao a tutti..
Ho creato in un progetto, dalla mia Form pricipale, un tast "avanti" (>>) che mi apre una seconda Form; dalla seconda form identica cosa, tasto ">>" che mi apre una terza form.
Sintassi dell' evento Click presente in ognuna delle 2 form:

Dim Newfrm As New printReport ' printReport è il nome di una delle 2 form create

Newfrm.ShowDialog()

Il problema che mi trovo è chhe chiudendo la terza form(sia con la X in alto a dx, che con un tasto che esegue il comando Me.close, e persino impostando il tasto nella proprietà Cancelbuttn della form), mi chiude anche la seconda form e torna direttamente alla prima.
Eseguendo passo passo vedo che esce dalla procedura di click del tasto, ma non riesco a capire cosa mi fa chiudere la seconda form.
Specifico che nelle form ci sono normalissimi controlli tipo caselle di testo, listview ecc..
provando con 1 progetto nuovo, e facendo la stessa cosa con 4 form vuote, senza controlli tutto funziona correttamente..

Qualche idea?

Grazie a tutti...

Andy

trinity Profilo | Guru

devi fare così:

ewfrm.ShowDialog(Me)

Ciao
Fabio

Andy Profilo | Senior Member

=(
Niente...ho provato ma continua a chiudermi anche il secondo form..non riesco proprio a capire...

trinity Profilo | Guru

Ma è molto strano,
comunque prova a ricreare una semplice form, non sfruttare la proprietà cancelbutton e su un pulsante gli imposti il codice Me.Close() mentre per aprire la form utilizzo sempre il tuo codice: Dim prova as New Frm_prova prova.ShowDialog(me)

Fammi sapere

Ciao
Fabio

Andy Profilo | Senior Member

Provato anche quello..niente da fare...e la beffa addirittura sta nel fatto che nella 3a form io apro un'ulteriore Form con solamente una ComboBox, la quale con lo stesso identico metodo viene aperta e richiusa regolarmante, ritornando alla sua form padre.

Per ora ho "aggirato" il problema creando una flag, che setto vera solo nela caso in cui l'utente prema il tasto Back, intercetto l'evento Closing e se la flag è vera lascio fare, se no lo blocco.
non è il massimo, anche perchè se un utente vuole chiudere la Form con il tastino X della Form non glielo permette..

Tristezza.... =)

trinity Profilo | Guru

Andy,
mi spiace ma come ti ho detto questo problema non mi si è mai posto di fronte, le ipotesi per risolverlo sono quelle che ti ho postato, nel caso mi dovessero venire in mente altre idee ti faccio sapere

Ciao

alextyx Profilo | Expert

Caro Andy, da quello che leggo, il trucco ci deve essere, ma sicuramente è nascosto bene. Sono convinto che se postassi un po' di codice potremmo risolverlo. Oppure....se nn è un problema per te, puoi postare il progetto qui: alex@aeaprato.it Gli darò un'occhiata volentieri e sono convinto che il trucco salterà fuori.

alextyx Profilo | Expert

Ah....mi raccomando,tutta la cartella del progetto: file .sln ecc..., così da poterlo lanciare senza ulteriori formalità. Se nn lo hai mai fatto prima, fai un test. Sposta in una cartella di invio tutto quanto vuoi mandare e poi prova a lanciare il tuo programma pescandolo in quella cartella. Dovrebbe essere un buon test! Ciao

Andy Profilo | Senior Member

Intanto vi ringrazio mille ragazzi, non preoccupatevi..è già tanto che mi rispondiate cosi in fretta ;)

Purtroppo postare codice non credo posa servire, in quanto è una serie di form, aperte con frm.showdialog(Me) e chiusa con Me.close, contenenti normalissimi controlli tipo combobox e listview, come già in precedenza ho fatto in altri progetti..non perchè sia "geloso" di cio che scrivo o altre cose simili, semplicemente non cè nulla di "strano" nelle form, non un datagrid, non un adapter, ho delle query ma editate da codice e passate a dei datareader (ma ciò non credo influisca sulla form).

Alex "mi inchino" per la tua disponibilità, ma anche inviarti il progetto mi risulta impossibile, in quanto lavoro su più tabelle Sql in un database aziendale, che come potrai ben capire non posso divulgare, sia per motivi di proprietà, sia per problemi di spazio fisico ^_^..e se escludo la parte di lavoro su Sql in pratica ho la form con solamente dei controlli vuoti...

Purtroppo ora ho anche problemi di tempo, e non posso perdermi troppo su questa cosa, intanto vi ringrazio ancora, appena ho finito il progetto mi sa che mi ricreo le form e passo passo vedo cosa mi da questo problema...in attesa se aveste altre idee..sono sempre aperto a suggerimenti...

Ciao a tutti..

alextyx Profilo | Expert

Capisco il tuo problema nel postare il tutto. Nn mi resta che augurarti 'in bocca al lupo' e....facci sapere cos'era quando lo avari trovato. Siamo curiosi! ;-)

alextyx Profilo | Expert

Una cosetta, che forse nn c'entra alcunchè, ma ora nn ho tempo per provare. Solitamente il FormModale si chiude 'per finta' con DialogResult=...qualcosa.., in genere Cancel oppure OK e poi lo si fa chiudere, disporre e mettere = nothing al form che lo ha istanziato. Questo in genere serve per poter leggere il contenuto dei controlli del form modale. Io, nn uso Me.close sui form modali, ma uso MioformModale.DialogResult=Cancel
oppure imposto la proprietà di un pulsante in maniera da ottenere lo stesso risultato, ma questo mi sembra tu l'abbia già fatto......boh ?!
Auguroni!

Andy Profilo | Senior Member

Si, in pratica faccio quello..se non premo il tasto di chiusura forzo una variabile boolean che mi blocca l'evento closing della form, con la riga

e.Cancel = True

Proverò...in caso trovo la soluzione statene certi che la posto..

Alla prossima!!!

Andy

alextyx Profilo | Expert

Asp....fores c'è un qui,quo, qua ( o un qui pro quo....boh, io il latino mica lo conosco!)...io intendevo nel form che deve chiudersi non in quello che NON deve chiudersi. Il form modale, normalmente, scompare esembra chiudersi nn appena viene dato un valore opportuno alla sua proprietà DialogResult, così il codice torna alla riga successiva a quella in cui era stato imposto lo ShowDialog. Dovrebbe funzionare tutto comunque bene anche col close. Un dubbio....non è che nascondi il Form2 (anche lui lanciato come modale se nn ricordo male) con un me.hide, prima di lanciare, sempre come modale, il form3? A volte ho visto delle cose strane in questo senso, proprio perchè il ritorno di un form modale (sembra una chiusura, perchè restituisce il controllo al form che lo ha 'aperto'), avviene proprio nascondendosi e mi sembra di aver visto che se un form modale si nasconde (Me.Hide), almeno in talune situazioni si comporta come se si chiudesse. Nn posso verificarlo a fondo, ma, giusto per scrupolo, se per caso tu nascondessi la form intermedia, prova a non farlo e guarda se cambia qualcosa! Di più...nin zò! ;-)))

Andy Profilo | Senior Member

No, non nascondo nulla, anche perchè in caso un utente potrebbe "spostare" la form attiva x dare un'occhiata ai dati sottostanti...
Però il dubbio viene a me ora...mettiamo che x qualche ragione strana il form mi si hidda e quindi resta in memoria(cosa che comunque non ritengo probabile, in quanto non risulta nella finestra di stack), come posso farlo rivedere di nuovo? con il .show?

Grazie mille Alex x lo sbattimento!!!

Ciaoo

alextyx Profilo | Expert

Se nn mi ricordo male, se lo rendi di nuovo visibile ci ritrovi anche tutti i dati. Infatti la chiusura 'finta' del form permette il ritorno al form 'padre' (quello che lo ha reso visibile con lo showdialog) che tranquillamente può leggere i suoi controlli o le sue variabili pubbliche. Dopo di ciò, normalmente io provvedo a chiudere e disporre il form. Se invece dai ancora una volta Show o ShowDialog ( salvo verifica perchè mi sembra di averlo fatto ma è anche passato tanto tempo!) , te lo ritrovi come era prima della finta chiusura. Parlo di finta chiusura, intendendo quella che si verifica mediante l'assegnazione di un valore alla proprietà DialogResult. Quindi se non dai close, dispose e per sicurezza =Nothing al form, quello ti rimane bello e pronto a risaltare fuori. Se ripeti la istanziazione, prima di averlo chiuso davvero, probabilmente ti crea un altro oggetto form e così, piano piano, ti ritrovi con un esercito di Form nascoste. Almeno....così mi pare. Ciao e buon lavoro.

Andy Profilo | Senior Member

mmm...concetto chiarissimo...però a me succede alla prima apertura della form figlio, non credo sia il mio caso..

Niente, questa cosa rimarrà un "insoluto clamoroso" nella mia carriera!!! :D

Grazie ancora ..

Ciao

alextyx Profilo | Expert

Ucci, ucci, sento odor di pulsantucci!
Mi è venuto un dubbio clamoroso....per caso il lancio del terzo form modale, avviene nella routine di click di un pulsante? Se sì, questo pulsante ha la proprietà DialogResult=None, oppure ha un valore diverso, che quindi, alla fine dell'esecuzione della routine, ti causa anche la chiusura del Form?
Mi sembra un'ipotesi valida e probabile, dagli un'occhiata!

Andy Profilo | Senior Member

TU SEI UN GENIO!!!!!!!!!!!!!!!!!!!!!!!!

Verissimo!!!! Per sbaglio, magari dopo troppe ore di lavoro, avevo impostato la proprietà Dialogresult dei tasti non so per quale motivo..

e poi, dando(eh, erroneamente, lo so) per scontato che nessuna proprietà del tasto fosse stata toccata, non ho controllato quel dettaglio..anche perchè sinceramente non pensavo mi chiudesse in auto la mia form aperta...che dire.. grazie mille, anche per la perseveranza!!!

Ciaoo

Andy

alextyx Profilo | Expert

Troppo buono, troppo buono !!!!
Ciao e buon lavoro. :-)
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5