早上好
我正在创建一个从Labels
到Label1
有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
但我的输出是:(
请忽略其他字母,因为我试图编码直到Label50
我怎样才能实现它?是否有其他方法可以缩短对每个标签的调用?
TYSM未来的帮助
答案 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的答案,我建议你这样做:
FlowLayoutPanel
。Panel
属性设置为Bottom。Dock
。Button
属性并取消选择“上边和左边”(未选中任何内容)。Anchor
。FlowLayoutPanel
属性设置为Fill。没有别的。然后使用此代码:
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个字符,这应该可以。