2014-05-03 52 views
-1

在C#中,我創建了一個繼承自UserControl的自定義控件,並將一個按鈕btnInTrayMap添加到自定義控件中。 然後我將自定義控件添加到主窗體。主窗體有另一個按鈕用於比較他們的行爲。 我觀察到的是主窗體上的按鈕在點擊時工作正常。但是,單擊時,駐留在自定義控件中的按鈕btnInTrayMap根本沒有響應。如何使自定義控件中的按鈕觸發onClick事件並使其在自定義控件所在的主窗體中處理?

我有自定義控制按鈕下面的代碼:

public partial class TrayMap : UserControl 
{      
    public TrayMap() 
    {          
     InitializeComponent();    
    }   

    public event EventHandler MyCustomClickEvent; 

    protected virtual void OnMyCustomClickEvent(object sender, EventArgs e) 
    {    
     if (MyCustomClickEvent != null) 
      MyCustomClickEvent(this, e); 
    } 

    private void btnInTrayMap_Click(object sender, EventArgs e) 
    {    
     OnMyCustomClickEvent(sender, EventArgs.Empty);    
    } 
} 

我相信TrayMap.designer.cs btnTrayMap.Click的事件處理可能造成的問題:

this.btnInTrayMap.Click += new System.EventHandler(this.btnInTrayMap_Click); 

在主表中,我有以下代碼:

public partial class Form1 : Form 
{   
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnInForm_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Test Button In Form", "btnInForm Button Clicked", MessageBoxButtons.OK); 
    } 

    public void MyCustomClickEvent(object sender, EventArgs e) 
    { 
     Button button = sender as Button; 
     MessageBox.Show("Test Button In TrayMap", button.Text + " Button Clicked", MessageBoxButtons.OK); 
    } 
} 

我想知道如何o設置事件委派,使得當單擊按鈕btnInTrayMap時,主窗體中的MyCustomClickEvent方法將被執行。 謝謝。

+0

您是否已經在主窗體中註冊了'MyCustomClickEvent'? –

+0

如何在主窗體中註冊MyCustomClickEvent? – user3599926

+0

請舉例說明。謝謝。 – user3599926

回答

1

您尚未在主表單中註冊您的活動。試試這種方式。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     trayMap.MyCustomClickEvent += MyCustomClickEvent; // i'm assuming trayMap is the name of user control in main form. 
    } 

    private void btnInForm_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Test Button In Form", "btnInForm Button Clicked", MessageBoxButtons.OK); 
    } 

    private void MyCustomClickEvent(object sender, EventArgs e) 
    { 
     Button button = sender as Button; 
     MessageBox.Show("Test Button In TrayMap", button.Text + " Button Clicked", MessageBoxButtons.OK); 
    } 
} 
相關問題