2010-11-07 8 views
1

J'ai un TextBox, sur l'événement LostFocus de ce que j'appelle une fonction, et ici je dois appeler ma fonction qui dans certaines situations doivent supprimer la TextBox, donc quand le le code revient à l'événement LostFocus, il me donne une exception NullReferenceException.Exécuter une fonction après la fonction de l'appelant terminé en C#

Alors, comment puis-je faire?

Est-il possible d'appeler ma fonction uniquement lorsque la fonction LostFocus est terminée?

Merci.

Bonjour! merci pour votre réponse .. ci-dessous vous pouvez voir un simple mon problème:

void senseMessage_LostFocus(object sender, EventArgs e) 
{ 
... 

MyFunction(); 

} 



void MyFunction() 
{ 
... 

senseList.RemoveItem(senseMessage); 

... add some other items to senseList... 

senseMessage = new StedySoft.SenseSDK.SensePanelTextboxItem(); 
senseMessage.Text = "test"; 
senseList.AddItem(senseMessage); 

} 

senseList est une liste d'articles, je dois avoir la senseMessage toujours à la fin de la liste. Ainsi, lorsque le senseMessage a perdu le focus (et qu'il est prêt à ajouter le texte dans un nouvel élément de la liste), j'ai besoin de supprimer senseMessage, d'ajouter le nouvel élément et de rajouter le senseMessage.

j'espère que vous pouvez me aider ..

+0

Pouvez-vous coller un peu de votre code dans votre question? Nous avons besoin d'un petit quelque chose pour partir d'ici. – IAbstract

+1

Tout d'abord, ne supprimez pas le TextBox, faites simplement tb.visible = false. – davisoa

+0

Pouvez-vous simplement vérifier si votre TextBox est null et gérer cela de manière appropriée? À mon avis, vous approchez de cela du mauvais angle. Comme d'autres personnes le mentionnent, pourquoi "supprimer" un TextBox quand vous pouvez le réutiliser? Cela aidera les performances de votre application. – jonathanpeppers

Répondre

2
 

delegate void VoidDelegate(); 


void senseMessage_LostFocus(object sender, EventArgs e) 
{ 
    BeginInvoke(new VoidDelegate(MyFunction), new object[]{}); 
} 
+0

Merci, merci beaucoup! Ce travail!! :) – Leen15

0

événement LostFocus est tout à fait faible niveau et étroitement lié à WIN32 api. Essayez plutôt d'utiliser l'événement Leave.

Si cela ne fonctionne toujours pas, essayez d'utiliser WindowsFormSynchronizationContext pour retarder votre fonction appeler comme ceci:

WindowsFormSynchronizationContext.Post(obj => { MyFunction(); }, nil); 

ou quelque chose comme ça. Désolé si la syntaxe peut être inexacte parce que je cours maintenant OS X alors je n'ai pas de VS.

+0

Merci pour votre réponse .. mais pas de solution. Je n'ai pas d'événement Leave et WindowsFormSynchronizationContext n'existe pas dans mon application netcf .. :( – Leen15

Questions connexes