Francesco Geri

Il blog di Francesco Geri
posts - 56, comments - 57, trackbacks - 2

My Links

News



Anch'io metto nel mio blog cose che scrivo così, tanto per fare, tanto per condividere miei appunti, senza prendermi la briga di garantirne l'infallibilità, né l'assoluta correttezza, senza pretese e con grande umilté.

Quanti mi hanno visto dal 25/10/2007:
...dettagli

Che libro leggo in questo periodo?*

L'Affittacamere - Valerio Varesi
* L'immagine è presa da IBS (http://www.ibs.it), spero non me ne vogliano...

Archives

Post Categories

Altre

Blogs

Da oggi al cinema: "Non Usare KeyUp!" - sottotitolo: oggi ce l'ho con la Microsoft!

Ragazzi, oggi la mia stima nei confronti della Microsoft è un po' calata.

Dopo essermi lamentato della prepotenza di outlook, ora mi trovo a dovermi lamentare anche della gestione eventi di VB.NET.

Provate a mettere una bella textbox (con nome TextBox1) in un form e scrivere questo codice:

   1:     Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
   2:        If e.KeyCode = Keys.Return Then
   3:           MessageBox.Show("Premuto invio")
   4:        End If
   5:     End Sub

 

Poi mandate in esecuzione, portate il focus sulla textbox e premete invio. Compare il messagebox, ri-premete invio per chiuderlo e TAC! Ricompare il messagebox.

Dunque, succede che la pressione del tasto "invio" mentre è attiva la finestra del messagebox scatena la gestione dell'evento di click sul pulsante (che chiude la fistra) e mette in coda l'evento di keyup. Questo evento viene spedido sul controllo attivo ovvero a textbox1 (dal momento che la messagebox è già chiusa e quindi non se lo può gestire).

Ci sarà una spiegazione a tutto questo, ma non voglio nemmeno saperla. Secondo me questo funzionamento non è quello che ci si aspetterebbe!

 

Comunque se vi capita una situazione del genere poteve ovviare al problema usando l'evento KeyDown o KeyPress al posto di KeyUp. L'importante è NON USARE KEYUP!

Print | posted on mercoledì 5 dicembre 2007 5.09 | Filed Under [ VS2005 .Net ]

Feedback

Gravatar

# re: Da oggi al cinema: "Non Usare KeyUp!" - sottotitolo: oggi ce l'ho con la Microsoft!

Sì, si chiama coda di messaggi... so che può sconvolgere ma è il modello che Windows (USER32) eredita al mondo a 16 bit cioè dagli anni '80. Win32 ha aggiunto l'associazione coda dei messaggi <-> thread.
Quando apri una message box innesti un loop di (lavorazione dei) messaggi su quello in essere (ossia Application.Run) e quando il thread esce dal loop piu' interno i messaggi ancora in coda vengono lavorati dal ciclio piu' esterno.
Se vuoi qualcosa di diverso devi mirare a WPF / Silverlight (ok anche il browser ha un modello un po' diverso, ma non e' proprio un piattforma nativa).
HTH
05/12/2007 8.00 | Giulio Vian

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 4 and 3 and type the answer here:

Powered by: