【问题标题】:How do i create buttons with different events如何创建具有不同事件的按钮
【发布时间】: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。如果仅此而已,您可以将按钮的标签设置为isender1 是引发事件的 Button,因此将其转换为 ButtonControl 以读取其标签。 -- 注意:如果您多次创建这些按钮,请不要使用 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 所以我需要为每个按钮设置一个单独的发件人,我该怎么做?

标签: c# button events


【解决方案1】:

你必须得到发件人的名字

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 += ((Button)sender1).Name;
    };
    this.Controls.Add(b);
}

【讨论】:

  • 如何获取发件人姓名?
  • @Ethereallie 发件人是引发事件的按钮。
  • 升起是什么意思?你的意思是那个事件还是?
  • 发件人是对象的类型。如果您查看代码,您可以看到通过将 sender 转换为按钮,您可以访问按钮的所有属性,以及名称。变量 'sender' 是引发、触发、触发事件的对象的引用。
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2016-06-22
相关资源
最近更新 更多