制作单个事件处理程序来处理〜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个可点击的文本框[重复]的主要内容,如果未能解决你的问题,请参考以下文章