2012-11-14 26 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不幸的是,我不能**接受**我自己的答案! :) 大声笑 –