2015-12-28 61 views
-1

我在c#中編程時遇到問題。我想從另一個這樣的事件中調用事件。從c中的另一個事件調用事件#

private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 formulario = new Form2(); 
     formulario.ShowDialog(); 
// here i call an event from the second form. that event is radiobutton_checkedchange 

formulario.radioButton1_CheckedChanged(sender, e); 

的問題是,我看everyware如何解決這個問題?他們說我說的事件就像是一個方法,但我認爲是不一樣的,因爲當我打電話的方法等它是事件看起來就像我只說了一次。該事件不識別檢查的更改。

我錯了嗎?這是可行的在C#中。謝謝大家,我是事件編程新手。對不起我的英文不好

+0

這個問題是針對WebForms應用程序嗎? – ViRuSTriNiTy

+1

您不打電話給事件。你正在調用處理事件的方法。你可以請你的特定事件顯示Form2類嗎? – Valentin

+2

你爲什麼要這樣做?試圖欺騙用戶界面認爲事件已經發生,當它真的不是一個好主意時。難道你不能直接改變複選框嗎? – David

回答

4

首先,radioButton1_CheckedChanged不是一個事件,它可能是一個事件處理程序。最後,它仍然是一個像所有其他方法一樣的方法。

您不應該直接調用事件的事件處理程序,只需創建另一個方法以及那裏的調用。把這個在您的Form2

private void radioButton1_CheckedChanged(object sender, EventArgs e) 
{ // private, only accessible from the class itself 
    this.SetState(); 
} 

public void SetState() 
{ // public, accessible from anywhere 

    // put your original code from radioButton1_CheckedChanged here 
} 

這樣一來,您不必調用事件特定代碼,但你可以寫在離開一個單獨的方法,這是它的目的更容易使用和更清晰。

如果兩個表單共享相同的數據對象/視圖模型,則可以從那裏設置值。從面向對象的角度來看,這會更好。研究MVVM或MVC以獲得良好的設計模式。

1

聽起來好像你有radioButton1_CheckedChanged的邏輯,你想要點擊按鈕時調用。如果是這種情況,那麼將公共邏輯移至新方法並從兩個地方調用它。

如果您想更改radioButton1的檢查狀態,那麼只需更改其狀態即可。事件hnadlers 迴應以UI改變,他們不會生成他們。

相關問題