2
我正在尋找一種常見的方式來解除綁定所有事件處理程序,並在做出可能觸發它們的事情後重新綁定它們。如何使所有事件處理程序解除綁定並在做某事後重新綁定它們?
目前,我正在使用的具體解決方案如下所示:
var
PrevBeforePost : TDataSetNotifyEvent;
PrevAfterPost : TDataSetNotifyEvent;
begin
PrevBeforePost := MyDataSet.BeforePost;
MyDataSet.BeforePost := nil;
PrevAfterPost := MyDataSet.AfterPost;
MyDataSet.AfterPost := nil;
try
//do something that would have triggered event handlers
finally
MyDataSet.BeforePost := PrevBeforePost;
MyDataSet.AfterPost := PrevAfterPost;
end;
end;
這種解決方案意味着我每一次,我需要即暫時禁用事件處理程序,即使我做寫具體的代碼測試... 此外,很容易陷入添加其他事件的陷阱中,而不記得在代碼中禁用它們。
有沒有辦法編寫一個通用的解決方案,對所有組件都以相同的方式工作? 例子:
var
Events : TInfosAboutEventHandlers;
begin
Events := GetEventHandlersAndSetThemToNil(MyDataSet);
try
//do something that would have triggered event handlers
finally
SetEventHandlers(MyDataSet, Events);
end;
end;
人們不禁要問,如果有可能是一個更好的解決問題的辦法....... –
@DavidHeffernan:你是什麼意思? – ExDev
我的意思是如果你可以解決你的問題,而不必擰緊事件處理程序。我的意思是找到一種方法來解決潛在的立場,而無需發現自己需要這樣做。另一方面,如果你只需要保存兩個事件處理程序,那麼這有多困難呢?如果你想要一些適用於所有可能組件的東西,那麼人們就會想到你爲什麼要編寫那些首先需要的代碼。 –