2012-04-17 60 views
0

我試圖在Visual Studio 2010中製作基於網格的地牢系統。我有一個主要的用戶控件,其中包含64個其他較小的用戶控件對象,我稱之爲GridSquares,組織成8x8網格。網格廣場背後的想法是充當「地下城」內潛在的運動空間。我目前遇到的問題是我需要能夠在用戶控件(GridSquares)上自己調用點擊事件,這些事件已放置在屏幕上,因此我可以檢索它們的座標(名稱)以進行比較。然而,當我打電話時(通過點擊)該事件不起作用。Visual Studio 2010 - C#UserControl事件觸發

我知道,當我把它們放在usercontrol(GridSquare對象)內時,這些事件工作,但當用戶控件本身被點擊時,我甚至需要點擊來工作。

鑑於所有放置的64個對象都是相同的類型,我不能在GridSquare類中工作,因爲我需要通過事件返回用戶控件的名稱。

我希望這是有道理的,但請詢問是否需要進一步解釋。

非常感謝,利亞姆

編輯: 我不知道有多少,這將有助於或顯示什麼代碼,但GridSpace控制已經被添加到「地牢」用戶控制。然後,我將所有64添加到字典中:

gridSpaces.Add(gs11.Name, gs11); 

其中gs11是GridSquare的名稱。

從這裏我試圖創建事件處理程序爲地牢屏幕上的個人用戶控件,未能調用。

+0

Windows窗體或WPF? – 2012-04-17 13:48:39

+0

我正在使用Windows Forms – Lazz 2012-04-17 14:07:45

+0

你能發表一些代碼嗎? – 2012-04-17 14:33:09

回答

0

我覺得我得到了你的說法。此代碼添加到您的用戶控件:

public new event EventHandler Click { 
    Add { 
     base.Click += value; 
     foreach(Control i in Controls) { 
      i.Click+=value; 
     } 
    } 
    remove { 
     base.Click -= value; 
     foreach(Control i in Controls) { 
      i.Click -= value; 
     } 
    } 
    } 

這會在你的用戶控件,我希望我沒有做任何的錯誤,單擊事件添加到的一切,這有助於

+0

這絕對是完美的。它正是我需要它做的。非常感謝你 – Lazz 2012-04-17 14:55:35

+0

沒問題:)我在製作自定義按鈕時遇到了完全相同的問題 – Oztaco 2012-04-17 15:30:49

0

您可以使用每個GridSquare相同的處理程序,並使用sender參數來決定被點擊了其中一個:

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 64; i++) 
    { 
     GridSquare square = new GridSquare(); 
     square.Click += new EventHandler(gridSquare_Click); 
     grid.Add(gridSquare); 
    } 
} 

void gridSquare_Click(object sender, EventArgs e) 
{ 
    GridSquare square = (GridSquare)sender; 
    // do something cool with the clicked square here 
} 
+0

謝謝你的建議。問題在於主用戶控件不會在實際的網格方形對象上註冊點擊事件,而只是在它們內部發生了什麼。 – Lazz 2012-04-17 14:01:41

+0

@Lazz,聽起來像是把你的一些代碼添加到問題的好時機。 :) – Bazzz 2012-04-17 14:08:49