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]另外,正如许多人已经建议的那样,在代码中创建标签是最好的方法,但是如果你想坚持这样做的话,我的解释应该是可行的。老实说,我认为在你不需要任何