制作索引控制数组?

fee*_*all 5 c# arrays user-controls winforms

是否有C#索引控制数组?我想设置一个"按钮数组",例如5个按钮,它们只使用一个事件处理程序来处理所有这5个控件的索引(就像VB6一样).另外,我必须为这5个按钮中的每个按钮写一个额外的事件处理程序.如果我有100个按钮,我需要100个事件处理程序?我的意思是这样的:

TextBox1[i].Text="Example";
Run Code Online (Sandbox Code Playgroud)

它可以使我更容易使用控制数组进行编码.现在我已经看到,C#至少在用户控件上没有可见的数组功能,在用户控件上没有"index"属性.所以我猜C#没有控制数组,或者我必须按已知名称调用每个元素.

我不得不在for循环100递增值中给出100个TextBox,而是写:

TextBox1.Text = Value1;
TextBox2.Text = Value2;
...
...
TextBox100.Text = Value100;
Run Code Online (Sandbox Code Playgroud)

还有很多工作+所有这100个事件处理程序,每个处理器额外增加一个TextBox.

Pet*_*ete 7

我知道我参加这个聚会有点晚了,但是这个解决方案会起作用:

创建一个全局数组:

    TextBox[] myTextBox;
Run Code Online (Sandbox Code Playgroud)

然后在你的对象的构造函数中,在调用之后

    InitializeComponent();
Run Code Online (Sandbox Code Playgroud)

初始化你的数组:

    myTextBox = new TextBox[] {TextBox1, TextBox2, ... };
Run Code Online (Sandbox Code Playgroud)

现在您可以迭代控件数组:

    for(int i = 0; i < myTextBox.Length; i++)
        myTextBox[i].Text = "OMG IT WORKS!!!";
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

皮特


Ari*_*bal 3

正如我在对 HatSoft 解决方案的评论中提到的,C# Winforms 不允许您像旧 VB6 允许我们那样创建控制数组。我认为我们能得到的最接近的是 HatSoft 和 Bert Evans 在他们的帖子中所展示的内容。

我希望能够满足您要求的一件事是事件处理程序,您将获得一个通用事件处理程序,并且在事件处理程序中,当您键入“发送者”时,您将直接获得控件,就像在 VB6 中一样

C#

TextBox textBox = sender as TextBox;
Run Code Online (Sandbox Code Playgroud)

VB6

TextBox textBox = TextBox1[i];
Run Code Online (Sandbox Code Playgroud)

因此,您可能遇到的唯一麻烦是将这 100 个文本框连接到单个事件处理程序,如果您不是通过代码动态创建控件,而是在设计时手动创建控件,那么我们可以建议的是将它们分组在一个容器中,例如面板。然后在表单加载上将它们全部连接到一个事件处理程序,如下所示:

foreach (Control control in myTextBoxPanel.Controls)
{
    if(control is TextBox)
         control.TextChanged += new EventHandler(control_TextChanged);
}
Run Code Online (Sandbox Code Playgroud)