制作单个事件处理程序来处理〜500个可点击的文本框[重复]

Posted

技术标签:

【中文标题】制作单个事件处理程序来处理〜500个可点击的文本框[重复]【英文标题】:Making a single event handler to handle ~500 clickable textboxes [duplicate] 【发布时间】:2022-01-19 10:19:57 【问题描述】:

我目前遇到以下问题:我有大约 500 个文本框,我想在单击时显示信息,但是为每个文本框单独执行此操作会花费太长时间。

我尝试了以下方法,使用包含我的 WinForm 中所有文本框的数组。但是,我似乎无法让它工作。

  var textBoxes = new List<Control>();
            foreach (Control c in Controls)
            
                if (c is TextBox)
                
                    textBoxes.Add(c);
                
            

foreach(var c in textBoxes)
 c.Click += textBox_Click();


public void textBox_Click(object sender, EventArgs e)
 string location = c.Text;
MessageBox.Show(location);

希望有人能帮帮我,谢谢!

【问题讨论】:

为什么首先你有 500 个文本框?所有这些文本框都是手动添加和配置的吗? ...或通过代码生成?如果它们是代码生成的,为什么你不能代码生成也连接事件处理程序? “但是,我似乎无法让它工作。” - 您需要向我们展示您是如何创建和填充您的 textBoxes 集合的。 c.Click += textBox_Click();错了,应该是c.Click += textBox_Click; @Dai 这是一个仓库的可视化表示,第一行是手工放置的,其余的是复制粘贴。这里的每个文本框代表这个仓库中的一个货架。 标签可能更有意义 【参考方案1】:

要获取特定类型的所有控件并分配事件,您可以这样做

foreach ( TextBox tb in this.Controls.OfType<TextBox>()) 

    tb.Click += textBox_Click;   //Note there are no brackets ()     

那么您不需要创建一个单独的数组来存储它们(尽管这也可以,并且可能在其他地方有用)。

那么你需要修改你的点击事件,因为这里有问题,所以你需要像这样将sender转换为TextBox类型。

 public void textBox_Click(object sender, EventArgs e)
 
            string location = ((TextBox)sender).Text;
            MessageBox.Show(location);
 

【讨论】:

成功了,谢谢!

以上是关于制作单个事件处理程序来处理〜500个可点击的文本框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

点击事件处理程序

jQuery UI可排序点击事件

PyQt5中文本框的OnClick事件? [复制]

jQuery—— jQuery get方法+一般处理程序处理文本框内容

十. 图形界面(GUI)设计7.文本框和文本区的输入输出

JavaSE基础(十 二 )---<GUI>标签,文本框,菜单,密码框组件||事件处理,对话框