2012-03-05 198 views
5

我想測試一些表單。有沒有辦法模擬Ok(或Cancel)按鈕的按下,以便按下按鈕並觸發與其關聯的事件處理程序?如何模擬按鈕按下?

+2

也看到這個答案爲[Delphi的貴測試和模態-形式](http://stackoverflow.com/a/6574035/576719)。 – 2012-03-05 07:03:50

+2

你想要的模擬精度如何?鼠標移動了嗎?按鈕是否顯示在屏幕上?該按鈕應該接收像'wm_LButtonDown'這樣的消息嗎? – 2012-03-05 14:47:16

+0

@LU RD,感謝您的指點!我只是想知道如何測試模態表單。這有助於。 – Arnold 2012-03-05 20:47:45

回答

17

最簡潔的方法是調用按鈕的Click方法。這比以下原因更好:

  • 您可以閱讀OnClick屬性,檢查它是否爲零,然後調用該方法。但是這看起來似乎毫無意義,因爲Click方法已經做到了。沒有重複此代碼的意思。
  • 而且你可以直接調用事件處理程序,但這需要你的代碼具有它的知識。這意味着對實施細節的耦合程度不理想。
  • 調用Click可以複製用戶點擊時實際發生的情況。它當用戶按下按鈕時會發生什麼。例如,它處理與按鈕關聯的任何操作。它設置形式ModalResult屬性。等等。
+0

+1,很棒的信息..永遠不會想到它, – PresleyDias 2012-03-05 09:06:50

+0

這正是我想要的。我對它進行了測試,它的工作原理讓我更容易測試表單。非常感謝! – Arnold 2012-03-05 20:44:20

5

btn_ok.clickbtn_okClick(sender);

1

調用OnClick事件處理程序將不會調用Delphi的默認事件處理程序,而只是由用戶實施的一個。我認爲你應該從TCustomButton創建你自己的類,並實現一個調用Click方法的函數(它受保護)。

+5

'TCustomButton.Click'是公共的,不受保護。 – 2012-03-05 07:59:06

+0

是的,只需在'TButton'實例上調用'Click'即可。不需要派生。 – 2012-03-05 08:06:39

+0

它在VCL中是公共的,它在Firemonkey中受到保護。 – naXa 2014-06-28 20:22:36

-1

這是更好地使用按鈕=>

button1.PerfomClick() 

PerformClick()方法如果您的按鈕是不是在正確的狀態,單擊(啓用虛假或不可見的),也不會進行點擊eventmethod。

+4

VCL中沒有'PerformClick'。在WinForms中有一個'PerformClick'。也許這就是你所指的。 – 2012-03-05 10:00:34