C# 如何迭代windows窗体控件
我有5个文本框和5个标签,命名如下:C# 如何迭代windows窗体控件,c#,winforms,loops,C#,Winforms,Loops,我有5个文本框和5个标签,命名如下: for (int i = 1; i <= 5; i++) { try { tcpCLient.ConnectAsync(text(i).Text, 80); label(i).Text = "Online"; } catch (Exception) { label(i).Text = "Offline"; } } text1,text2,text3等 l
for (int i = 1; i <= 5; i++)
{
try
{
tcpCLient.ConnectAsync(text(i).Text, 80);
label(i).Text = "Online";
}
catch (Exception)
{
label(i).Text = "Offline";
}
}
,text1
,text2
等text3
,label1
,label2
等label3
for (int i = 1; i <= 5; i++)
{
try
{
tcpCLient.ConnectAsync(text(i).Text, 80);
label(i).Text = "Online";
}
catch (Exception)
{
label(i).Text = "Offline";
}
}
for(int i=1;i嗯,代码标签(i).文本的格式不正确。这似乎是您试图使用参数i
调用函数label
,并访问该结果的成员Text
你可以这样做
Label[] labels = { label1, label2, label3, label4, label5 };
TextBox[] textBoxes = { text1, text2, text3, text4, text5 };
for (int i = 0; i < 5; i++)
{
try
{
tcpCLient.ConnectAsync(textBoxes[i].Text, 80);
labels[i].Text = "Online";
}
catch (Exception)
{
labels[i].Text = "Offline";
}
}
Label[]labels={label1,label2,label3,label4,label5};
TextBox[]textboxs={text1,text2,text3,text4,text5};
对于(int i=0;i<5;i++)
{
尝试
{
tcpCLient.ConnectAsync(文本框[i].Text,80);
标签[i].Text=“在线”;
}
捕获(例外)
{
标签[i].Text=“脱机”;
}
}
“当前上下文中不存在名称“text”
text[i]。text只有在text
type实现IEnumerable
您可以这样做来枚举您的控件
var labels = new List<Label> { label1, label2, label3};
var textBoxs = new List<TextBox> { text1, text2, text3};
for (int i = 1; i <= 5; i++)
{
try
{
tcpCLient.ConnectAsync(textBoxs[i].Text, 80);
labels[i].Text = "Online";
}
catch (Exception)
{
labels[i].Text = "Offline";
}
}
var labels=新列表{label1,label2,label3};
var textBoxs=新列表{text1,text2,text3};
对于(int i=1;i您可以通过表单的ControlCollection
迭代表单的控件
看
但请注意,这包括所有控件。如果要选择特定控件,则必须按类型和/或名称进行筛选
不过,我强烈建议您选择另一条路线,我会制作一个UserControl
,并结合使用MVC模式
另外请注意,您的代码不会按预期工作,因为它似乎试图将相同的TcpClient
实例连接到4个不同的端点。在windows窗体中,您可以迭代窗体。控件
以更自动化的方式获取所有标签和文本框
例如:
List textboxs=Controls.OfType()
.Where(txt=>txt.Name.StartsWith(“文本”))
.ToList();
列表标签=控件。OfType()
.Where(lbl=>lbl.Name.StartsWith(“标签”))
.ToList();
对于(int i=0;i
注意:这种方法只能获取表单的直接子项。如果文本框和标签是不同父控件的子项(例如面板
),您将需要迭代该父控件的控件
属性。要迭代all表单的控件
请参见:它是web应用程序或桌面、mvc、winforms什么?猜测它是winforms,表单有一个可以迭代的属性:但我实际上建议使用模型、控制器和Binding、 顺便说一句,这段代码无论如何都不起作用。你正在尝试将一个TcpClient实例连接到4个端点??如果你想深入研究绑定,你可以从这里开始:它是一个桌面WinForms,使用C#和框架4.8。我用Clint的方法解决了这个问题,但我将按照@Fildor的建议研究绑定!只要我关闭它,它似乎也是这样工作的非常感谢!这就成功了。我会记住枚举只对数组起作用的事实。“枚举只对数组起作用的事实”-这是不正确的说法。任何类都可以实现索引器。更不用说列表
!=数组标签(I)
按索引访问的语法不正确。它应该是标签[i]
@ASh,good catch,edited