在C#中调用函数完成后执行函数

时间:2010-11-07 15:06:45

标签: c# function nullreferenceexception

我有一个TextBox,在LostFocus事件中我调用了一个函数,这里我需要调用我的函数,在某些情况下必须删除TextBox,所以当代码回到LostFocus事件时,它给出我是一个NullReferenceException。

那我该怎么办?

只有在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。

我希望你能帮助我..

2 个答案:

答案 0 :(得分:2)


delegate void VoidDelegate();


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

答案 1 :(得分:0)

LostFocus事件非常低级,并且与WIN32 api密切相关。请尝试使用Leave事件。

如果仍然无效,请尝试使用WindowsFormSynchronizationContext来延迟调用您的函数:

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

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