2013-07-28 72 views
1

我會盡量簡潔但易於理解。我有圖片框元素的動態2維數組,他們正在通過所有添加到相同的形式:將控件的MouseClick事件傳遞給它的容器

this.Controls.Add(PictureBoxArray[i,j]); 

現在我設計一個算法,將決定這些的PBS被點擊,但我已將其放置在ParentForm_MouseClick方法中。現在我已經到了一個悖論。我創建的算法返回正確的輸出,但ParentForm_MouseClick方法僅在單擊窗體中的空白區域時調用,而不是在單擊PictureBoxes時調用。所以我的問題是 - 當用戶單擊窗體中的任何位置時,如何調用ParentForm_MouseClick方法,即是否可以重寫PictureBoxes的MouseClick事件,以便調用ParentForm_MouseClick?

編輯:這只是發生在我,我可以創建一個自定義PictureBoxClass類,它擴展了.NET一個,只是覆蓋鼠標點擊()事件調用我以前寫的方法?

+0

爲什麼不給每個圖片框指定一個鼠標點擊事件?那麼沒有任何算法,您只需使用事件的發件人 – Sayse

+0

這是最簡單的方法。但我有8x8陣列,據我所知在.NET中沒有一個Control.setOnClickEventMethod(),所以我必須爲每一個單獨實現它。 – NitroNbg

+0

您可以迭代數組並附加事件處理程序。 – keyboardP

回答

0

好像你是過於複雜的事情。如果您需要在不同地方的事件處理程序中調用代碼,最好將其抽象爲不同的方法。您可以將相同的事件處理程序附加到調用該方法的PictureBoxes。

for(int i = 0; i < PictureBoxArray.GetLength(0); i++) 
{ 
    for(int j = 0; j < PictureBoxArray.GetLength(1); j++) 
    { 
     //attach handler 
     PictureBoxArray[i,j].Click += pictureBox_Click; 
    } 
} 


void pictureBox_Click(object sender, EventArgs e) 
{ 
    MyMethod();  
} 

void parentForm_Click(object sender, EventArgs e) 
{ 
    MyMethod();  
} 

private void MyMethod() 
{ 
    //method to be called 
} 
相關問題