一开始,我希望我的程序从数组中的列表中检查服务状态,然后将它们添加到两个新的文本框中:
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
循环中打破其余部分
任何建议都会受到高度赞赏,因为我还是新手并希望获得“良好代码”
非常感谢
答案 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;
}