2016-08-05 41 views
0

早安产生的所有标签1个信

我创建具有到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 

但我的输出是这样的:(

enter image description here

请忽略其他字母,因为我试图代码,直到Label50

我怎样才能实现呢?是有其他的方式缩短呼叫每个标签?

TYSM for future help

+0

你想用随机字母文本生成标签吗?或者他们已经存在?你是否也在寻找C#或VB.NET的帮助? – mariocatch

+0

这里的字母已经存在了,我只把它写成样本。我想要他们中的字母文字先生和尽可能多的VB.Net –

+0

“无论它是否重复,只要其不同” - 这是没有道理的。如果重复,则不会有所不同。 – Enigmativity

回答

1

这里是由@mariocatch提供的代码的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 

这是Convertor用于将C#代码转换为VB.NET代码以供参考。

+1

@Andrew'FlowLayoutPanel'为您处理添加控件的位置。 – mariocatch

+0

我需要坚持我的代码模式,因为最近我会打电话给标签 –

+0

稍后我将有2个文本框,然后我将输入一个数字从1到100,并使用该数字我将显示生成的数字 –

0

假设标签多达50个是带有“F”的标签:

您已经确定sb离开循环后的值。然后,您将采取这一价值并将其设置为每个标签的文本,这就是为什么它不起作用。你也创建了一个从1开始到1结束的循环,这是一个非常毫无意义的循环,因为它只运行一次。如果修改循环以在stringbuilder中生成100个字符,然后将第n个标签设置为stringbuilder的第n个字符,则应该起作用。

+0

我该如何编码先生?这是我第一次这样做 –

+0

当然:默认情况下,for循环会增加1,直到达到最终值。既然你创建了一个从1到1的循环,它只会运行一次。将最后一个值更改为100,它将在stringbuilder中生成许多字符。一旦你得到了字符串,你以前在做ToString()的地方,你做了ToString()[n - 1]。这意味着Label1.Text = sb.ToString()[0]和Label2.Text = sb.ToString()[1] – VortixDev

+0

作为附加说明,在代码中创建标签将是最好的方法已经建议,但是我的解释应该能够工作,如果你想坚持如何完成它 – VortixDev

2

这就是你想要的(c#)?基本上,动态创建Labels,并将它们添加到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); 
} 

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 
+0

这是一个完美的答案。请参阅以下相同代码的VB.NET版本。 – vivek

+1

@Andrew FlowLayoutPanel为您处理添加控件的位置。 – mariocatch

+0

哦,你是对的,好主意。 – Andrew

2

选项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(); 
    } 
} 

简单地循环th粗略表格的所有标签(如果需要,可以过滤它们)并为每个标签分配一个随机字母。就这样。不需要使用StringBuilders或带有字母的数组。

我也用Convertor把它变成VB,我希望它的工作原理:

Private Sub Form1_Load(sender As Object, e As EventArgs) 
    Dim labels = Me.Controls.OfType(Of Label)() 
    Dim rnd = New Random() 

    For Each label As var In labels 
     label.Text = CChar(rnd.[Next](26) + "A"C).ToString() 
    Next 
End Sub 

选项2,从头开始:

最后,基于mariocatch的答案,它采用了FlowLayoutPanel ,我建议你这样做:

  1. 以空格开始。
  2. 添加Panel
  3. 将其Dock属性设置为Bottom。
  4. 里面添加一个Button
  5. 转至其Anchor属性并取消选择“顶部”和“左侧”(未选中)。
  6. 设置面板的高度并水平居中按钮。
  7. 在表格的中间添加一个FlowLayoutPanel
  8. 将其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 

之后,我认为你可以调整所有的细节没有任何问题。

+0

var有一个错误先生 –

+0

我需要坚持我的代码模式,因为最近我会打电话给标签 –

+0

以后我会有2个文本框,然后我会输入一个数字从1到100,并使用该数字我将显示生成的号码 –

相关问题