我创建了一个for循环,我想在每次循环运行时将从数组加载的随机文本添加到不同的标签。我已将所有标签添加到我的表单中,称为lbl1,lbl2,lbl3等。
Random r = new Random();
for (int i = 1; i <= 4; i++)
{
int randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
//this is where I want to add the text to a random label
}
如何每次将文本添加到随机标签?我需要创建某种数组或列表吗?我希望每次都有一些方法可以将i添加为变量名的后缀。对不起,如果这很明显,我是C#的新手。
谢谢!
答案 0 :(得分:2)
根据您使用的框架,有几种方法可以做到这一点。
在Windows窗体中,您可以使用Controls [“lbl1”],因此在您的情况下,您将按如下方式编写循环:
Random r = new Random();
for (int i = 1; i <= 4; i++)
{
var randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
var label = (Label)Controls["lbl"+i];
label.Text = randomtext;
}
或类似的东西(我不记得Windows窗体的确切Api)。
在WPF上,您将使用FindName
方法。容器控件有这种方法。
大多数其他框架应该有类似的方法。在最坏的情况下,你可以使用反射:
var label = (Label)this.GetType().GetProperty("lbl" + i).GetValue(this, null);
答案 1 :(得分:0)
Random r = new Random();
for (int i = 1; i <= 4; i++)
{
int randomtext = r.Next(0, mytext.GetLength(0)); //choosing random element of array to be added to label
var randomLblIndx = r.Next(1,5);// I am assuming you have 4 lablels only
var lbl = (Label)this.Controls[lbl + randomLblIndx.ToString()];
lbl.Text = myarrayOfText[randomtext];
}
答案 2 :(得分:0)
如果您正在使用Windows窗体,则在您创建的每个窗体(或组件)中都有一个名为Controls
的属性。
此属性是ControlCollection
类型的集合,并且有一个名为Find
的函数,它允许您通过它的名称查找特定控件。
所以,你可以这样做:
const labelProfix = "lbl";
Random r = new Random();
for (int i = 1; i <= 4; i++)
{
var randomNumber = r.Next(0, mytext.GetLength(0));
var label = (Label)Controls.Find(labelPrefix + randomNumber.ToString(), false).First();
label.Text = "My text";
}
请注意Find()
返回一个数组(名称可能不明确),因此我们使用First()
的扩展方法System.Linq;
来获取第一个元素。此外,感谢First()
,如果它没有找到任何带有我们传递的名称的控件,那么该行代码将抛出异常,因此您可以在不获取NullReferenceExceptions
的情况下知道代码是否错误