TextBox_Validated e Chiusura Form

martedì 29 gennaio 2008 - 16.57

Teech Profilo | Expert

Mi ritrovo in questa situazione:
Ho un Form che contiene dei TextBox. Su un TextBox in particolare, ho inserito del codice negli eventi Validating e Validated. Nello specifico, nell'evento Validated in base ad una logica ben precisa si apre un Form Modale. Tutto funziona ma...

Quando premo la X per chiudere il form, se mi trovo nella condizione che il focus è sulla mia TextBox con l'eventio Validated "particolare" e il contenuto del controllo ha le caratteristiche corrette succede che prima della chiusura viene visualizzato il mio Form Modale e non si chiude la Form "base" senza che chiudo il Modale...

Come posso controllare, prima di ogni cosa nell'evento Validated, se è stata richiesta la chiusura del form?
Non ho trovato nulla nelle proprietà del form...

Grazie dell'aiuto!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

SSUPERPIPPO Profilo | Guru

Per capire bene il tuo problema potresti postare il codice relativo agli eventi Validating e Validated?

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Teech Profilo | Expert

E' una cosa molto semplice tipo:

Class FormBase ... Private Sub tb_Validated (...) Handles tb.Validated If tb.text="Prova" Then Dim fm As New FormModulare fm.ShowDialog End If End Sub ... End Class
Il problema è che quando ho il Focus sulla TextBox tb, la proprietà Text di tale TextBox è "Prova" e chiudo il form, come prima cosa mi apre il FormModulare e alla chiusura di FormModulare chiude anche FormBase

Vorrei poter fare una cosa simile...
Class FormBase ... Private Sub tb_Validated (...) Handles tb.Validated '---------- If Me.RichiestaChiusura=True then Exit Sub <--- Fare una cosa simile '---------- If tb.text="Prova" Then Dim fm As New FormModulare fm.ShowDialog End If End Sub ... End Class

Grazie dell'interessamento...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

SSUPERPIPPO Profilo | Guru

Potresti fare così:

1. Per la chiusura del Form crei un Button anzichè utilizzare la X di chiusura form.
2. Nell'evento GotFocus del tuo Button inserisci questo codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
In questo modo, quando il Button prende il focus, la proprietà CausesValidation del textbox viene impostata a false impedendo che avvenga la validazione del controllo stesso.

Prova e fammi sapere, ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Teech Profilo | Expert

Ma non esiste un metodi più pulito?
Ho visto nelle Espressioni di controllo che l'oggetto Me (il form per intenderci) ha una proprietà CloseReason che farebbe al caso mio, ma non riesco a leggerla in nessun modo da codice... O per lo meno, non riesco a leggerla nell'evento Validated del TextBox...

Perchè non riesco a leggerla? Come posso fare?

Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

SSUPERPIPPO Profilo | Guru

>Ma non esiste un metodi più pulito?
>Ho visto nelle Espressioni di controllo che l'oggetto Me (il
>form per intenderci) ha una proprietà CloseReason che farebbe
>al caso mio, ma non riesco a leggerla in nessun modo da codice...
>O per lo meno, non riesco a leggerla nell'evento Validated del
>TextBox...
>
>Perchè non riesco a leggerla? Come posso fare?
>
>Grazie mille!!!
>--------------
>Maurizio Brini
>--------------
>Nessuna impresa è mai stata compiuta da un uomo ragionevole

Il problema è che l'evento Validated si verifica prima della chiusura del form per cui prima che qualsiasi evento di chiusura form si scateni il tuo form dialog è già riapparso.

Una soluzione (decisamente poco elegante) potrebbe essere quella di far partire un timer all'evento Validated in modo da ritardare quel tanto che serve affinchè il form si chiuda correttamente.

Diversamente ritorno alla soluzione del Button di chiusura form (non mi sembra un'idea così pessima...) dove l'evento GotFocus si manifesta invece sempre prima dell'evento Validated del Textbox.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

Teech Profilo | Expert

Scusami, non volevo che mi fraintendessi...
La soluzione del Button per la chiusura è sicuramente funzionante e, a questo punto, la più pulita...
E' che non capisco perchè, facendi un debug, posso vedere fra le proprietà del Form la CloseReason per l'oggetto Me ma non posso leggerla... Questo mi sembrava più "pulito"... Poi, in questo modo, vedo una certa inutilità della X per chiudere il form che deve essere disabilitata... Non credo che sia così remota la possibilità di operare sull'evento Validate dei controlli e, sempre a logica, la richiesta di chiusura la considero "superpartes" rispetto ad ogni altro evento... Se dovessi effettuare delle verifiche prima della chiusura agirei sull'evento Closing...

Grazie dell'interessamento...
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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