如何将TextBox添加到Array中的表单?

时间:2016-06-27 10:23:23

标签: c# arrays

一开始,我希望我的程序从数组中的列表中检查服务状态,然后将它们添加到两个新的文本框中:

    public string[] wantedServices = { "MSSQL$SQL", "SQLBrowser" };
    public TextBox[] txtserviceStatus = new TextBox[2];

    //Gets Service Status On Load
    public void StartServiceStatus()
    {
        int i = 0;
        ServiceController[] services = ServiceController.GetServices()
                      .Where(svc => wantedServices.Contains(svc.ServiceName))
                      .ToArray();
        foreach (ServiceController sc in services)
        {
            txtserviceStatus[i].Text = sc.Status.ToString();
            this.Controls.Add(txtserviceStatus[i]);
            txtserviceStatus[i].Left = 0;
            txtserviceStatus[i].Top = (i + 1) * 20;
            i++;
        }
    }

当我单步执行代码时,它只执行第一行并且不会在foreach循环中打破其余部分

任何建议都会受到高度赞赏,因为我还是新手并希望获得“良好代码”

非常感谢

2 个答案:

答案 0 :(得分:1)

您基本上只是创建类TextBox的对象数组,但之后您正在使用对象而不将类的任何实例连接到它们。因此,您只需要在循环开头添加txtserviceStatus[i] = new TextBox();,这样就可以使用文本框的实例。

答案 1 :(得分:1)

创建数组txtserviceStatus = new TextBox[2]时,默认情况下该数组中的值均为null。您需要自己在数组中创建项目:

public string[] wantedServices = { "MSSQL$SQL", "SQLBrowser" };
public TextBox[] txtserviceStatus;

//Gets Service Status On Load
public void StartServiceStatus()
{
    txtserviceStatus = ServiceController.GetServices()
                  .Where(svc => wantedServices.Contains(svc.ServiceName))
                  .Select(sc => sc.Status.ToString())
                  .Select(CreateTextBox)
                  .ToArray();
    txtserviceStatus.ForEach(this.Controls.Add);
}

private TextBox CreateTextBox(string text, int i) {
    TextBox textBox = new TextBox();
    textBox.text = text;
    textBox.Left = 0;
    textBox.Top = (i + 1) * 20;
    return textBox;
}