【发布时间】:2021-08-01 01:33:39
【问题描述】:
for(int i = 0; i < 4; i++)
{
bttn = "b" + i;
Button b = new Button
{
Width= 100,
Name = "b" + i,
Text = "hey" + i,
Location = new Point(centerLine.Location.X+i*100,centerLine.Location.Y),
};
b.Click += (sender1, e1) =>
{
textBox1.Text += "wtf"+i;
};
this.Controls.Add(b);
}
我的问题是我不知道如何进行多个事件,我只有一个发送者,据我了解,发送者只是确定我的事件,所以在 for 循环结束时它将等于我做的最后一个活动。
好的,所以我尝试创建 4 个带有事件的按钮。但问题是当我按下任何按钮时,事件是相同的,wtf4 被添加到文本框中,就像最后一个按钮确定所有事件一样。中心线只是我拥有的一条线,可以帮助我将这些按钮创建到特定位置。我如何让这些活动与众不同?
【问题讨论】:
-
你不能在那里使用
i。如果仅此而已,您可以将按钮的标签设置为i。sender1是引发事件的 Button,因此将其转换为Button或Control以读取其标签。 -- 注意:如果您多次创建这些按钮,请不要使用 Lambda 订阅事件,使用方法(这样您可以在释放按钮时轻松取消订阅)。 -
我的按钮的标签?什么是标签? sender1 不是按钮。我完全理解你所说的 0,这是一个项目顺便说一句,我们没有教任何足够接近的东西来做到这一点,我们只是在这里和那里自学
-
每个控件(按钮就是控件)都有一个
Tag属性。您可以将其设置为您想要的任何内容(字面意思是 anything)。 -- 当控件引发事件时,sender对象是对引发事件的控件的引用。然后,您可以将sender强制转换为特定类型,或者在本例中 - 因为Tag属性属于Control派生自Button的类 - 到Control。例如,var value = (sender as Control).Tag;或var value = (sender as Button).Tag;或var value = ((Button)sender).Tag;或var value = ((Control)sender).Tag; -
但我创建了 4 个单独的按钮,它们是用单独的名称和内容创建的,但事件不是,你是说发件人应该是唯一的还是?
-
@Jimi ok 所以发件人是一个类似于指针的参考 ok 所以我需要为每个按钮设置一个单独的发件人,我该怎么做?