You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何给点击事件中定义的控件对象添加绑定方法?

动态生成TextBox控件的Lambda事件绑定实现方法

你提到的=>是C#的Lambda表达式,用于给事件绑定匿名方法的标准语法为:
控件实例.事件名 += (sender, eventArgs) => { 你的执行逻辑 }

你现有代码中,在TextBox实例初始化完成后直接追加绑定逻辑即可,以下是完整修改示例:

private void button1_Click(object sender, EventArgs e)
{
    ex_y += 25;
    n = int.Parse(textBox1.Text);
    for (int i = 0; i < n; i++)
    {
        Button b = new Button();
        this.Controls.Add(b);
        b.Size = new Size(50, 50);
        b.Location = new Point(ex_x + b.Width + 25, ex_y);
        ex_x = b.Location.X;
        b.Text = rand.Next(0, 100).ToString();
        a[i] = int.Parse(b.Text);

        rand.Next(0, 100);
        TextBox txt = new TextBox();
        this.Controls.Add(txt);
        txt.Size = new Size(b.Size.Width, 50);
        txt.Location = new Point(b.Location.X, b.Location.Y + 60);
        txt.BackColor = Color.White;

        // 新增:绑定TextChanged事件示例,文本内容修改时触发
        // 先定义局部变量存储循环索引,避免闭包捕获问题
        int currentIndex = i;
        txt.TextChanged += (s, args) =>
        {
            // s为触发事件的TextBox实例,强转后即可操作
            TextBox currentTxt = s as TextBox;
            // 示例逻辑:把输入值同步到a数组对应索引位置
            if (int.TryParse(currentTxt.Text, out int inputVal))
            {
                a[currentIndex] = inputVal;
            }
        };

        // 如果需要绑定其他事件,如失去焦点触发,写法一致
        txt.LostFocus += (s, args) =>
        {
            MessageBox.Show($"第{currentIndex+1}个文本框输入内容为:{(s as TextBox).Text}");
        };
    }
}

注意事项

  • Lambda参数中的s对应事件触发的sender,也就是当前绑定的TextBox实例,强转后可以获取/修改控件的所有属性
  • 循环内绑定事件如果要用到循环变量i,必须在循环内部定义局部变量暂存i的值,否则会因为闭包捕获特性,所有事件拿到的都是循环结束后的最终i值,导致逻辑错误

内容的提问来源于stack exchange,提问作者MIRUNA TEODORA TURBATU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:18:01