[C#] lost focus non funziona

martedì 27 aprile 2010 - 10.35

chira Profilo | Newbie

buongiorno, (spero di essere nella sezione giusta).
ho un' applicazione in c# 2008, una windows form su cui ho varie text box.
x es textbox1 e textbox2. su entrambe ho un evento il lost focus al cui interno esegue operazioni. il problema è x es se scrivo nella textbox1 e poi clicco sulla textbox2 giustamente mi va sull'evento del lostfocus della textbox1 da cui ho realmente lasciato il focus ma poi quando finisce le operazioni all'interno del lostfocus della textbox1 va anche sul lost focus della textbox2 cosa che invece nn dovrebbe fare perchè se mai la textbox1 ha acquisito il focus non perso.
come mai non funziona?

grazie

AntCiar Profilo | Expert

Ciao.

Da come hai spiegato il problema, non dovrebbe eseguire il lostFocus sulla TextBox2. Secondo me il problema sta nell'evento LostFocus sulla TextBox1. Postaci quello che fai in questo evento. Secondo me richiami qualcosa tale da scatenare il lostFocus.

Ciao
Cristian Barca

kataklisma Profilo | Senior Member

>buongiorno, (spero di essere nella sezione giusta).

Ciao :), si sei nella sezione giusta!

>ho un' applicazione in c# 2008, una windows form su cui ho varie text box.
>x es textbox1 e textbox2. su entrambe ho un evento il lost focus al cui interno esegue operazioni. il problema è x es se scrivo nella textbox1 e poi clicco sulla textbox2 giustamente mi va sull'evento >del lostfocus della textbox1 da cui ho realmente lasciato il focus ma poi quando finisce le operazioni all'interno del lostfocus della textbox1 va anche sul lost focus della textbox2 cosa che invece nn >dovrebbe fare perchè se mai la textbox1 ha acquisito il focus non perso.
>come mai non funziona?

Secondo il mio parere nell'evento lostfocus richiami un'operazione (tipo assegnazione nella proprietà .Text della textbox1) che ritorna il focus su textbox 1 e quindi lo fa perdere a textbox2 entrando nel relativo evento.

Come diceva Christian prova a postare un po il codice che vediamo di risolvere ;)

Ciao :)


------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

chira Profilo | Newbie

private void TextBox1_LostFocus(object sender, EventArgs e)
{
int num = 0;
string message = "";
try
{
Int32.Parse(TextBox1.Text);
num = Convert.ToInt32(TextBox1.Text);
if ((num < 4) | (num > 160))
{
message = String.Format("Value: {0} is not acceptable, it must be lower than 160 and higher than 4!", num);
MessageBox.Show(this, message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
TextBox1.Text = "4";
}
return;
}
catch (FormatException err)
{
message = String.Format(" Value is not acceptable,it must be an Int number: {0}", err.Message);
MessageBox.Show(this, message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
TextBox1.Text = "4";
return;
}
}

stessa cosa x la textbox2..

e nel costruttore sono associati cosi:
this.TextBox1.LostFocus+= new EventHandler(TextBox1_LostFocus);


ho provato anche a fare da zero una windows form mettere 2 text box al cui interno il codice nn fa nulla tipo int i =0; e fa sempre la stessa cosa. quandop col click schiaccio sulla 2 textbox prima entra sul TextBox1_LostFocus e subito dopo sul LostFocus della textbox su cui ho cliccato (a cui ho dato il focus tramite il click del mouse) cosa che però non dovrebbe fare visto che deve entrarci solo quando perde il focus non quando lo "guadagna"

AntCiar Profilo | Expert

ciao.

Come detto Ignazio il problema può stare nella riassegnazione della proprietà Text su TextBox1.
Per risolvere il problema utilizza una variabile booleana per controllare l'evento.

ciao
Cristian Barca

kataklisma Profilo | Senior Member

>...
>TextBox1.Text = "4";
>...

Con questa operazione reimposti il focus su textbox1 facendo eseguire l'evento lostfocus sulla textbox2, il comportamento da te verificato è quindi "giustissimo"
Se ci spieghi cosa dovrebbe fare questa routine in termini pratici forse troviamo un workaround :)


------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

chira Profilo | Newbie

no perchè nel textbox.text ="4" ci va solo vefìrificate certe condizioni e nelle prove che ho fatto anche quando non entrava li faceva la stessa cosa.. infatti come ho scritto dopo ho anche provato a fare una lost focus in cui in realtà non facevo nulla ma entra lo stesso nel lostfocus della textbox che schiaccio dopo.. nel senso nella prova dopo ho scritto
textbox1_lostFocus()
{
int i =0;
}
textbox2_lostFocus()
{
int i =0;
}
sono sulla textbox1 scrivo poi schiaccio sulla textbox2 e quindi nella teoria dovrebbe andare solo sulla textbox1_lostFocus() invece prima fa textbox1_lostFocus() e poi anche textbox2_lostFocus(), il che è sbagliato

kataklisma Profilo | Senior Member

Ho fatto qualche prova ed effettivamente ho notato che con queste condizioni le due textbox perdono contemporaneamente il focus.

Comunque sia ho risolto in questo modo, usufruendo del GotFocus :

private void textBox1_LostFocus(object o, EventArgs e) { this.textBox1.Text = "Perso"; } private void textBox2_LostFocus(object o, EventArgs e) { this.textBox2.Text = "Perso"; } private void textBox1_GotFocus(object o, EventArgs e) { this.textBox1.Text = "Preso"; } private void textBox2_GotFocus(object o, EventArgs e) { this.textBox2.Text = "Preso"; }

Se provi, avrai effettivamente il testo "Perso" nella texbox che perde il focus e "Preso" in quella che lo ottiene ;)

Ciao!
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

chira Profilo | Newbie

speravo riusciste a dirmi il perchè non funziona la lostFocus (o come farla funzionare)...

kataklisma Profilo | Senior Member

>speravo riusciste a dirmi il perchè non funziona la lostFocus
>(o come farla funzionare)...

Scusami ma penso di averti risolto il problema spiegandoti che utilizzando i due eventi parallalamente si puo aggirare il problema relativo alla tua situazione.
Quel comportamento è normale in quanto evidentemente il controllo acquista il focus in seguito alle operazioni effettuate.

Ciao ;)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
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