我有一个创建Label
并显示文本的类。
我还有一个Click
事件,当它触发时,Label
文本会更改。
我有另一个类,该类将方法传递给第一个显示MessageBox
的方法。
在主要的Form
中,我正在运行一个for
循环,该循环在随机位置创建2个类的实例。
问题是,当我单击Label
时,文本在所需的Label
上没有变化。它将更改为创建的第一个Label
(类)。
我该如何更改?
class J1
{
public Label texto;
public static int a = 0;
//Calls the Method that Creates the Label
public void Spawn(Form form, int _X, int _Y)
{
LL(form, _X, _Y);
}
//Creates the label
public void LL(Form form, int _X, int _Y)
{
texto = new Label()
{
Size = new System.Drawing.Size(35, 50),
Left = _X,
Top = _Y,
Text = "nova label"
};
texto.Click += new EventHandler(Label_Clicada);
form.Controls.Add(texto);
}
void Label_Clicada(object sender, EventArgs e) //Click event when fires
{
J2.M(); //2nd Class that shows a MessageBox
//Changes Text, but doenst change the one that was clicked on
texto.Text = texto.GetType().ToString();
}
}
二等舱(J2):
class J2
{
public static void M()//Method that I pass to 1nd class(J1)
{
J1.a++;
MessageBox.Show(J1.a.ToString());
}
}
答案 0 :(得分:0)
正如我在评论解决方案中发布的那样,它在点击事件中使用了(sender as Label).Text
。
sender
是object
类型,其中包含触发事件的object
。
如果我们看一下如何使用此代码触发事件:
EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
if (handler != null)
{
handler(this, e);
}
我们可以看到hanlder(this, e);
正在传递this
对象,该对象将触发它,而e
作为一些参数(事件args)。
现在this / object
,如果您将多个对象绑定到同一事件,则可以通过任何事件作为对象。
例如,如果您执行yourButton.Click += ClickEvent;
和yourLabel.Click += ClickEvent
,则其中的两个按钮上面都有代码,但是它们都将传递不同的this (themselves)
和e (events if there are any)
因此在我们的活动中,我们可以这样做:
private void ClickEvent(object sender, EventArgs e)
{
if(sender is Label)
{
Label l = sender as Label;
//Do anything with label
}
else if(sender is Button)
{
Button b = sender as Button;
//Do anything with button
}
else
{
MessageBox.Show("Unknown component");
//Or
throw new Exception("Unknown component");
}
}