回答
您只需直接調用事件處理函數和對參數指定null
發件人和EventArgs.Empty
。
void ButtonClicked(object sender, EventArgs e)
{
// do stuff
}
// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);
// call the event handler directly:
ButtonClicked(button1, EventArgs.Empty);
或者說,你會移動的邏輯出了ButtonClicked
事件到其自身的功能,然後你的事件處理程序,你有其它的代碼將依次調用新的功能。
void StuffThatHappensOnButtonClick()
{
// do stuff
}
void ButtonClicked(object sender, EventArgs e)
{
StuffThatHappensOnButtonClick();
}
// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);
// Simulate the button click:
StuffThatHappensOnButtonClick();
後一種方法的優點是可以讓您將業務和UI邏輯分開。你真的不應該在你的控件事件處理程序中擁有任何業務邏輯。
button1.PerformClick();
但是,如果你必須做這樣的事情,最好是將新事件下的代碼移到新的方法上?
是的,只需調用方法就可以調用任何其他方法。例如:
private void btnSayHello_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World!");
}
private void btnTriggerHello_Click(object sender, EventArgs e)
{
btnSayHello_Click(null, null);
}
我不需要調用處理程序方法。我需要觸發事件。處理程序在觸發事件後被調用。 – steavy
在.NET框架使用模式,其中對於每一個事件X
有一種方法protected void OnX(EventArgs e) {}
該引發事件X
。看到這個Msdn article。要從聲明類外部引發事件,您必須派生類並添加公共包裝方法。在Button
的情況下,它應該是這樣的:
class MyButton : System.Windows.Forms.Button
{
public void ProgrammaticClick(EventArgs e)
{
base.OnClick(e);
}
}
使用一個for循環調用button_click事件
private void btnadd_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i <= 2; i++)
StuffThatHappensOnButtonClick();
}
void StuffThatHappensOnButtonClick()
{
........do stuff
}
我們假設至少一次,你需要點擊按鈕
來吧!這究竟與這個問題有關? – chouaib
爲什麼你不只是把你的事件代碼放入一個方法。然後讓事件執行該方法。這樣,如果您需要執行事件上升的相同代碼,您可以,但只需調用「方法」即可。
void Event_Method()
{
//Put Event code here.
MessageBox.Show("Hello!");
}
void _btnSend_Click(object sender, EventArgs e)
{
Event_Method();
}
void AnotherMethod()
{
Event_Method();
}
有意義嗎?現在,「點擊」事件和代碼中的任何地方都可以觸發與「點擊」事件相同的代碼。
不要觸發事件,調用事件調用的方法。 ;)
- 1. 以編程方式觸發MouseLeftButtonDown事件
- 2. 以編程方式觸發ACTION_POINTER_DOWN事件
- 3. 以編程方式觸發ontouch事件
- 4. jQuery以編程方式觸發事件
- 5. jQuery - 以編程方式觸發事件
- 6. 以編程方式觸發Sitecore事件
- 7. 以編程方式嵌套控件事件觸發
- 8. 以編程方式觸發ASP.NET控件事件的正確方法是什麼?
- 9. 處理以編程方式添加到頁面的控件觸發的事件?
- 10. 如何在以編程方式檢查控件時防止觸發CheckedChanged事件?
- 11. 以編程方式添加的點擊事件不會觸發
- 12. 如何以編程方式觸發ASP.net頁面中的事件
- 13. 以編程方式觸發單元測試的UI事件
- 14. 以編程方式觸發Android上按鈕的點擊事件
- 15. 如何以編程方式觸發離子中的doubletap事件?
- 16. Swing以編程方式發送事件
- 17. 以編程方式在iOS中發送遠程控制事件
- 18. 以編程方式在Linux上觸發inotify事件
- 19. jQuery - 檢測更改事件以編程方式觸發
- 20. 以編程方式掛鉤事件不會觸發?
- 21. 以編程方式觸發按鈕事件
- 22. 以編程方式更新散列而不觸發hashchange事件?
- 23. iPhone,如何以編程方式觸發按鈕事件
- 24. 如何以編程方式觸發mx:Button單擊事件?
- 25. 在Coldfusion中以編程方式觸發事件
- 26. 如何以編程方式在javascript中觸發dblclick事件?
- 27. 如何在JavaFX中以編程方式觸發鼠標事件?
- 28. 在jQuery UI對話框上以編程方式觸發事件
- 29. 以編程方式選擇行時未觸發didSelectRowAtIndexPath事件
- 30. 如何以編程方式觸發Twitter意向事件?
因爲這個問題仍然存在(我甚至有一些聲譽:)),我想在這裏放一個小小的警告:如果你認爲你需要在你的代碼中做這樣的事情比幾乎確定你做錯了什麼。我也是如此。你可能有一些不好的設計,你最好花一些時間,重新考慮你在做什麼,爲什麼。 – steavy
我真的認爲這是一個相關的問題,我想創建一個彈出式菜單,通常包括工具欄中的所有項目以及上下文菜單已經有的,itsme86提到的PerformClick方法幫助:-) – s1cart3r