2010-11-07 79 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