gpt4 book ai didi

c# - 使用点击事件访问同一个类中的另一个变量

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:17 26 4
gpt4 key购买 nike

我有以下问题:

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

我的类(class):

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,因为它只看到我的标签,但看不到它在我的类 Box 中的部分。

最佳答案

你有几个选择:

  • 将每个 Box 的引用放在每个 LabelTag 属性中。
  • 处理 Box 类中的 Click 事件,然后调用用 替换原始发件人 (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
}

关于c# - 使用点击事件访问同一个类中的另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com