C# 通过单击事件访问同一类中的另一个变量

C# 通过单击事件访问同一类中的另一个变量,c#,labels,C#,Labels,我有以下问题: 我想通过单击鼠标来访问类中的变量 我的班级: public class Box { public Label LabelDown = new Label(); public byte SavedID; public Box(EventHandler InsideEvent) { LabelDown.Text = null; LabelDown.Size = new Size(96, 32); L

我有以下问题:

我想通过单击鼠标来访问类中的变量

我的班级:

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;

    }
}
现在,我在表单中创建了该类的
数组
,使用:

 Box[] myBox = new Box[5];
在初始化表单的代码中,我添加了以下内容:

  for (byte j = 0; j <= myBox.Length(); j++)
     {
         mybox = new Box(Box_goInside_Click)
         Controls.Add(Box[j].LabelDown);
     }
我希望你明白我的问题是什么。。。如果我使用base或其他任何东西,它将访问Object,因为它只看到我的标签,而不看到它在我的类框中的一部分。

您几乎没有选择:

  • 将每个
    的引用放在每个
    标签
    标记
    属性内
  • 处理事件
    单击
    类中的
    事件,然后调用处理程序,将原始发送者(
    标签
    )替换为
    本身
第一个解决方案:

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
}
第二种解决方案:

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
}

哇,非常感谢!第一个解决方案对我来说完美无瑕:)@user1824237不幸的是,我不能接受我自己的答案!:)英雄联盟