2010-11-07 203 views
1

我有一个TextBox,在这个函数的LostFocus事件中,这里我需要调用我的函数,在某些情况下必须删除文本框,所以当代码返回到LostFocus事件,它给了我一个NullReferenceException。在C#中调用者函数完成后执行函数#

那么我该怎么办?

只有在LostFocus函数完成后才可以调用我的函数吗?

谢谢。

嗨!谢谢您的回答..下面你可以看到一个简单的,我的问题:

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是项目的名单,我需要有senseMessage总是在列表的末尾。 因此,当senseMessage失去焦点(并准备好添加列表的新项目中的文本)我需要删除senseMessage,添加新项目,并重新添加senseMessage。

我希望你能帮助我..

+0

你可以在你的问题中粘贴一些代码吗?我们需要一点点才能离开这里。 – IAbstract 2010-11-07 15:09:25

+1

首先,不要删除文本框,只需将tb.visible = false。 – davisoa 2010-11-07 15:10:50

+0

你可以简单地检查你的文本框是否为空,并处理适当的?在我看来,你从错误的角度来看待这个问题。正如其他人所说,为什么“删除”一个文本框,当你可以重用它?这将有助于您的应用程序的性能。 – jonathanpeppers 2010-11-07 15:34:38

回答

2
 

delegate void VoidDelegate(); 


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

谢谢,非常感谢!这工作! :) – Leen15 2010-11-07 16:06:07

0

LostFocus事件是相当低的水平,并密切结合到WIN32 API。尝试使用Leave事件。

如果仍然无法工作,尝试使用WindowsFormSynchronizationContext耽误您的调用函数是这样的:

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

或类似的东西。对不起,如果语法可能不准确,因为我现在运行OS X,所以我没有VS.

+0

感谢您的答案..但没有解决方案。我没有Leave事件,并且WindowsFormSynchronizationContext不存在于我的netcf应用程序中。:( – Leen15 2010-11-07 15:47:38

相关问题