2012-11-14 20 views
2

我有以下問題:訪問同班另一個變量與click事件

我想通過點擊鼠標來訪問我的類中的變量。

我的班級:

public class Box 
{ 

    public Label LabelDown = new Label(); 
    public byte SavedID; 

    public Box(EventHandler InsideEvent) 
    { 

     LabelDown.Text = null; 
     LabelDown.Size = new Size(96, 32); 
     LabelDown.Visible = true; 
     LabelDown.Click += new EventHandler(InsideEvent); 

     SavedID = 0; 

    } 
} 

現在,我在一個表單創建這個類的一個Array,使用:

Box[] myBox = new Box[5]; 

在初始化我窗體的代碼,我添加了這一點:

for (byte j = 0; j <= myBox.Length(); j++) 
    { 
     mybox = new Box(Box_goInside_Click) 
     Controls.Add(Box[j].LabelDown); 
    } 

現在的Click事件處理程序是:

void Box_goInside_Click(object sender, EventArgs e) 
    { 

     //here i want to access the saved ID of MyBox that uses this Label 
     Dosomething(whatever comes here. SavedID) 

    } 

我希望你明白我的問題是什麼......如果我使用base或其他任何東西,它將會到達Object,因爲它只能看到我的Label,但不會看到它是我的Box類的一部分。

回答

1

您有幾種選擇:

  • 把每LabelTag物業內的每個Box的參考。
  • Box類中處理事件Click事件,然後用Box本身調用處理程序替換原始發件人(Label)。

解決方案一:

public Box(EventHandler InsideEvent) 
{ 
    LabelDown.Text = null; 
    LabelDown.Size = new Size(96, 32); 
    LabelDown.Visible = true; 
    LabelDown.Click += new EventHandler(InsideEvent); 
    LabelDown.Tag = this; 

    SavedID = 0; 
} 

void Box_goInside_Click(object sender, EventArgs e) 
{ 
    Box box = (Box)((Control)sender).Tag; 

    // Do your stuff 
} 

解決方法二:

public class Box 
{ 
    public Label LabelDown = new Label(); 
    public byte SavedID; 

    public Box(EventHandler InsideEvent) 
    { 

     LabelDown.Text = null; 
     LabelDown.Size = new Size(96, 32); 
     LabelDown.Visible = true; 
     LabelDown.Click += OnLabelClick; 

     SavedID = 0; 

     _insideEvent = InsideEvent; 
    } 

    private EventHandler _insideEvent; 

    private OnLabelClick(object sender, EventArgs e) 
    { 
     if (_insideEvent != null) 
      _insideEvent(this, e); 
    } 
} 

void Box_goInside_Click(object sender, EventArgs e) 
{ 
    Box box = (Box)sender; 

    // Do your stuff 
} 
+0

哇,謝謝你啊! 第一個解決方案對我來說完美無缺:) – user1824237

+0

@ user1824237不幸的是,我不能**接受**我自己的答案! :) 大聲笑 –