Vb.net 在所有标签中生成1个字母
早上好Vb.net 在所有标签中生成1个字母,vb.net,Vb.net,早上好 我正在创建一个应用程序,它有100个标签,从Label1到Label100。我的目标是,所有这些标签都必须在字母表中生成随机字母,不管它是否重复,只要它不同 这是我试过的代码 Dim validchars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim sb As New StringBuilder() Dim rand As New Random() For i As
我正在创建一个应用程序,它有100个标签,从
Label1
到Label100
。我的目标是,所有这些标签都必须在字母表中生成随机字母,不管它是否重复,只要它不同
这是我试过的代码
Dim validchars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim sb As New StringBuilder()
Dim rand As New Random()
For i As Integer = 1 To 1
Dim idx As Integer = rand.Next(0, validchars.Length)
Dim randomChar As Char = validchars(idx)
sb.Append(randomChar)
Next i
Label1.Text = sb.ToString()
Label2.Text = sb.ToString()
Label3.Text = sb.ToString()
Label4.Text = sb.ToString()
Label5.Text = sb.ToString()
Label6.Text = sb.ToString()
Label7.Text = sb.ToString()
Label8.Text = sb.ToString()
'and so on until i reached Label100
但我的输出是:(
请忽略其他字母,因为我试图编码到Label50
我怎样才能做到这一点?还有没有其他方法可以缩短呼叫每个标签的时间
TYSM用于将来的帮助假设最多50个标签是带有“F”s的标签:
一旦离开循环,您就确定了sb的值。然后,您将获取该值并将其设置为每个标签的文本,这就是它不起作用的原因。您还创建了一个从1开始到1结束的循环,这是一个非常无意义的循环,因为它只运行一次。如果您修改循环以在stringbuilder中生成100个字符然后将第n个标签设置为stringbuilder的第n个字符,这应该可以工作。假设最多50个标签是带有“F”的标签:
一旦离开循环,您就确定了sb的值。然后,您将获取该值并将其设置为每个标签的文本,这就是它不起作用的原因。您还创建了一个从1开始到1结束的循环,这是一个非常无意义的循环,因为它只运行一次。如果您修改循环以在stringbuilder中生成100个字符然后将第n个标签设置为stringbuilder的第n个字符,这应该会起作用。这就是你要做的(c#)?基本上,动态创建
标签,并将它们添加到FlowLayoutPanel
中进行堆叠和定位
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Random random = new Random();
for (int i = 0; i < 100; i++)
{
Label label = new Label();
label.Text = alphabet[random.Next(0, alphabet.Length)].ToString();
flowLayoutPanel1.Controls.Add(label);
}
这就是你想要的(c#)?基本上,动态创建标签
,并将其添加到流程布局面板
中进行堆叠和定位
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Random random = new Random();
for (int i = 0; i < 100; i++)
{
Label label = new Label();
label.Text = alphabet[random.Next(0, alphabet.Length)].ToString();
flowLayoutPanel1.Controls.Add(label);
}
选项1,与您现有的表单一起:
我会在代码中而不是在设计器中创建标签,但如果您已经创建了标签,则可以执行以下操作:
private void Form1_Load(object sender, EventArgs e)
{
var labels = this.Controls.OfType<Label>();
var rnd = new Random();
foreach (var label in labels)
{
label.Text = ((char)(rnd.Next(26) + 'A')).ToString();
}
}
选项2,从头开始:
最后,根据Mariocach的答案,它使用了一个FlowLayoutPanel
,我建议您这样做:
从一个空表单开始
添加面板
将其Dock
属性设置为底部
在内部添加一个按钮
转到其Anchor
属性并取消选择顶部和左侧(未选择任何内容)
设置面板的高度并使按钮水平居中
在窗体的中间添加<代码> FlowLayoutPanel <代码>。< /LI>
将其Dock
属性设置为Fill
除此之外没有其他内容。然后使用以下代码:
Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim rnd = New Random()
For i As Integer = 0 To 49
Dim label = New Label()
label.Width = 20
label.Text = CChar(rnd.[Next](26) + "A"C).ToString()
Me.flowLayoutPanel1.Controls.Add(label)
Next
End Sub
在此之后,我认为您可以毫无问题地调整所有细节。选项1,使用您现有的表单:
我会在代码中而不是在设计器中创建标签,但如果您已经创建了标签,则可以执行以下操作:
private void Form1_Load(object sender, EventArgs e)
{
var labels = this.Controls.OfType<Label>();
var rnd = new Random();
foreach (var label in labels)
{
label.Text = ((char)(rnd.Next(26) + 'A')).ToString();
}
}
选项2,从头开始:
最后,根据Mariocach的答案,它使用了一个FlowLayoutPanel
,我建议您这样做:
从一个空表单开始
添加面板
将其Dock
属性设置为底部
在内部添加一个按钮
转到其Anchor
属性并取消选择顶部和左侧(未选择任何内容)
设置面板的高度并使按钮水平居中
在窗体的中间添加<代码> FlowLayoutPanel <代码>。< /LI>
将其Dock
属性设置为Fill
除此之外没有其他内容。然后使用以下代码:
Private Sub Form1_Load(sender As Object, e As EventArgs)
Dim rnd = New Random()
For i As Integer = 0 To 49
Dim label = New Label()
label.Width = 20
label.Text = CChar(rnd.[Next](26) + "A"C).ToString()
Me.flowLayoutPanel1.Controls.Add(label)
Next
End Sub
在此之后,我认为您可以调整所有细节,而不会出现任何问题。这是由@mariocch提供的VB.NET版本的代码。我喜欢它
Dim alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim random As New Random()
For i As Integer = 0 To 99
Dim label As New Label()
label.Text = alphabet(random.Next(0, alphabet.Length)).ToString()
flowLayoutPanel1.Controls.Add(label)
Next
这是用于将C#代码转换为VB.NET代码以供参考的在线版本。这是@Mariocach提供的代码的VB.NET版本。我喜欢它
Dim alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim random As New Random()
For i As Integer = 0 To 99
Dim label As New Label()
label.Text = alphabet(random.Next(0, alphabet.Length)).ToString()
flowLayoutPanel1.Controls.Add(label)
Next
这是用于将C#代码转换为VB.NET代码以供参考的联机代码。您是否希望生成带有随机字母文本的标签?或者它们是否已经存在?您是否也在寻找C#或VB.NET帮助?字母已经存在于其中,我仅作为示例编写。先生,我希望字母文本也存在于其中它尽可能是VB.Net“不管它是否重复,只要它不同”-这没有意义。如果重复,就不会有什么不同。稍后我将有2个文本框,然后我将输入1到100之间的数字,并使用该数字显示生成的数字。您希望生成包含随机字母文本的标签吗?或者它们已经存在吗?您是否正在寻找C#或VB.NET ASIS实例?这些字母已经存在于其中,我只是作为一个样本来写的。我希望字母文本在其中,先生,并且尽可能是VB.Net“不管它是否重复,只要它不同”-这没有意义。如果重复,则不会有任何不同。稍后,我将有2个文本框,然后我将输入一个从1到100的数字,并使用该数字显示生成的数字。我可以对该数字进行编码吗,先生?这当然是我第一次这样做:默认情况下,for循环递增1,直到达到其最终值。Sin如果您创建了一个从1到1的循环,它将只运行一次。将最后一个值更改为100,它将在stringbuilder中生成如此多的字符。一旦获得字符串,即之前执行ToString()的位置,则执行ToString()[n-1]。这意味着Label1.Text=sb.ToString()[0]和Label2.Text=sb.ToString()[1]另外,正如许多人已经建议的那样,在代码中创建标签是最好的方法,但是如果你想坚持这样做的话,我的解释应该是可行的。老实说,我认为在你不需要任何