【问题标题】:Making a single event handler to handle ~500 clickable textboxes [duplicate]制作单个事件处理程序来处理〜500个可点击的文本框[重复]
【发布时间】: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 这是一个仓库的可视化表示,第一行是手工放置的,其余的是复制粘贴。这里的每个文本框代表这个仓库中的一个货架。
  • 标签可能更有意义

标签: c# winforms textbox


【解决方案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);
 }

【讨论】:

  • 成功了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2018-12-03
  • 2017-07-29
  • 1970-01-01
相关资源
最近更新 更多