在所有标签中生成1个字母

时间:2016-08-05 02:04:03

标签: vb.net

早上好

我正在创建一个从LabelsLabel1有100 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未来的帮助

4 个答案:

答案 0 :(得分:2)

这是你想要的(c#)吗?基本上,即时创建layer { name: "inception_4e/relu_5x5_reduce" type: "ReLU" bottom: "inception_4e/5x5_reduce" top: "inception_4e/5x5_reduce" } layer { I0805 10:15:13.698256 30930 layer_factory.hpp:77] Creating layer data I0805 10:15:13.698444 30930 net.cpp:100] Creating Layer data I0805 10:15:13.698465 30930 net.cpp:408] data -> data I0805 10:15:13.698514 30930 net.cpp:408] data -> label F0805 10:15:13.699956 671 db_lmdb.hpp:15] Check failed: mdb_status == 0 (2 vs. 0) No such file or directory *** Check failure stack trace: *** ,并将其添加到Labels进行堆叠和定位。

FlowLayoutPanel

VB.NET:

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 :(得分:2)

选项1,使用现有表单:

我会在代码中而不是在设计器中创建标签,但如果您已经拥有它们,则可以执行此操作:

word-wrap:break-word;
word-break:break-all;

只需遍历所有表单的标签(如有必要,您可以过滤它们)并为每个标签分配一个随机字母。就这样。无需使用StringBuilders或带字母的数组。

我还使用Convertor将其转换为VB,我希望它有效:

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,从头开始:

最后,基于使用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 的mariocatch的答案,我建议你这样做:

  1. 以空表格开头。
  2. 添加FlowLayoutPanel
  3. 将其Panel属性设置为Bottom。
  4. 在里面添加Dock
  5. 转到其Button属性并取消选择“上边和左边”(未选中任何内容)。
  6. 设置面板的高度并使按钮水平居中。
  7. 在表单中间添加Anchor
  8. 将其FlowLayoutPanel属性设置为Fill。
  9. 没有别的。然后使用此代码:

    Dock

    在此之后,我认为您可以毫无问题地调整所有细节。

答案 2 :(得分: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代码以供参考。

答案 3 :(得分:0)

假设最多50个标签是&#34; F&#34; s:

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