【发布时间】:2012-07-22 04:28:19
【问题描述】:
是否有 C# 索引控件数组?我想放置一个“按钮数组”,例如带有 5 个按钮,它们只使用一个事件处理程序来处理所有这 5 个控件的索引(就像 VB6 一样)。否则我必须为这 5 个按钮中的每一个编写一个额外的事件处理程序。如果我有 100 个按钮,我需要 100 个事件处理程序吗?我的意思是这样的:
TextBox1[i].Text="Example";
它可以让我使用控制数组更轻松地进行编码。现在我已经看到,C# 至少在用户控件上没有可见的数组功能,并且在用户控件上没有“索引”属性。所以我猜 C# 没有控制数组,或者我必须用已知名称调用每个元素。
我必须这样写:
TextBox1.Text = Value1;
TextBox2.Text = Value2;
...
...
TextBox100.Text = Value100;
更多的工作 + 所有这 100 个事件处理程序,每一个都额外增加一个 TextBox。
【问题讨论】:
-
每个父控件都有一个属性
.Controls,它可以访问子控件的集合。如果您将所有文本框/按钮放在同一个父容器中,则可以通过子控件列表引用它们。 -
您可以将同一个事件处理程序分配给多个控件,您不需要为每个控件实例创建新的事件处理程序实现。
-
你可能有一些运气实现 ICollection
where T : Control,但你不能将事件处理程序添加到数组中。 -
您不能使用反射(一次)将所有控件放入一个数组中,然后将其用作数组吗?当然 - 如果您只是在事件处理程序之后,还有其他建议的方法。
-
用户的负担反复暴露在一百个文本框的 UI 灾难中,需要与程序员应得的炼狱相匹配。这是唯一的公平。
标签: c# arrays winforms user-controls