我有以下问题:
我想通过鼠标点击访问我班级中的变量。
我的班级:
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的一部分。
答案 0 :(得分:1)
你几乎没有选择:
Box
的{{1}}属性中添加每个Tag
的引用。Label
类中的事件Click
事件,然后使用Box
本身调用处理程序替换原始发件人(Label
)。第一个解决方案:
Box
第二个解决方案:
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
}