2016-08-05 10 views
0

Guten Morgengenerieren 1 Brief in allen Labels

ich eine Anwendung erstellen, die ich 100 Labels von Label1 zu Label100 hat. Mein Ziel hier ist, dass alle diese Etiketten zufällige Buchstaben im Alphabet erzeugen müssen, egal ob es wiederholt wird, solange es anders ist.

Hier ist mein Code, den ich ausprobiert habe.

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 

Aber meine Ausgabe ist dies :(

enter image description here

Bitte die anderen Buchstaben ignorieren, weil ich bis Label50

zu codieren versucht Wie kann ich es erreichen? Und gibt es andere Weise um das Aufrufen jedes einzelnen Labels zu verkürzen?

TYSM für zukünftige Hilfe

+0

Wollen Sie die Etiketten mit dem zufälligen Buchstaben-Text in ihnen generieren? Oder gibt es sie schon? Suchen Sie auch Unterstützung für C# oder VB.NET? – mariocatch

+0

die Buchstaben existieren bereits dort und ich schreibe es nur als Beispiel. Ich möchte den Brieftext in ihnen und so viel wie möglich es ist VB.Net –

+0

"egal, ob es wiederholt wird, solange es anders ist" - das macht keinen Sinn. Wenn es wiederholt wird, kann es nicht anders sein. – Enigmativity

Antwort

1

Hier ist die VB.NET-Version des von @mariocatch bereitgestellten Codes. Ich mag das.

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 

Dies ist die Convertor C# -Code zu VB.NET-Code als Referenz verwenden online konvertieren.

+1

@Andrew 'FlowLayoutPanel' behandelt die Positionierung von zusätzlichen Steuerelementen für Sie. – mariocatch

+0

Ich muss mit meinem Code-Muster bleiben, denn in letzter Zeit werde ich die Etiketten –

+0

später anrufen, ich werde 2 Textfeld haben und danach werde ich eine Nummer von 1 bis 100 eingeben und mit dieser Nummer werde ich die generierte Nummer –

0

Angenommen, bis zu 50 Labels sind die mit den "F" s:

Sie haben den Wert von sb bestimmt, nachdem Sie die Schleife verlassen haben. Sie nehmen dann diesen Wert und setzen das auf den Text jedes Etiketts, weshalb es nicht funktionieren würde. Sie haben auch eine Schleife erstellt, die bei 1 beginnt und bei 1 endet, was eine ziemlich sinnlose Schleife ist, da sie nur einmal ausgeführt wird. Wenn Sie die Schleife ändern, um 100 Zeichen im Zeichenfolgengenerator zu generieren, und dann die n-te Beschriftung auf das n-te Zeichen des Zeichenfolgen-Editors setzen, sollte dies funktionieren.

+0

Wie kann ich das Sir? Dies ist das erste Mal, dass ich das mache –

+0

Natürlich: die for-Schleife wird standardmäßig um 1 erhöht, bis sie ihren endgültigen Wert erreicht. Da Sie eine Schleife von 1 bis 1 erstellt haben, wird sie nur einmal ausgeführt. Ändern Sie den letzten Wert in 100 und es werden so viele Zeichen im Zeichenfolgengenerator generiert. Sobald Sie die Zeichenfolge erhalten haben, an der Sie zuvor ToString() ausgeführt haben, tun Sie ToString() [n - 1]. Dies bedeutet, dass Label1.Text = sb.ToString() [0] und Label2.Text = sb.ToString() [1] – VortixDev

+0

Als zusätzliche Anmerkung wäre das Erstellen der Etiketten im Code der beste Weg zu gehen, so viele haben bereits empfohlen, aber meine Erklärung sollte funktionieren, wenn Sie mit, wie Sie es getan haben, bleiben wollen – VortixDev

2

Ist das was du willst (C#)? Grundsätzlich erstellen Sie die Labels im laufenden Betrieb und fügen sie zu einer FlowLayoutPanel zum Stapeln und Positionieren hinzu.

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

Dies ist die perfekte antwort. Siehe die folgende VB.NET-Version desselben Codes. – vivek

+1

@Andrew FlowLayoutPanel behandelt die Positionierung der hinzugefügten Steuerelemente für Sie. – mariocatch

+0

Oh, du hast recht, gute Idee. – Andrew

2

Option 1, mit Ihrer bestehenden Form:

ich die Etiketten im Code erstellt haben würde und nicht im Designer, aber wenn Sie schon haben sie, können Sie dies tun:

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

Einfach loop th Alle Beschriftungen des Formulars grob (Sie können sie gegebenenfalls filtern) und jedem einen zufälligen Buchstaben zuweisen. Und das ist alles. Keine Notwendigkeit, StringBuilders oder ein Array mit den Buchstaben zu verwenden.

habe ich auch Convertor es in VB zu drehen, ich hoffe, es funktioniert:

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 

Option 2, von Grund auf neu:

Schließlich basiert auf mariocatch Antwort, die eine FlowLayoutPanel verwendet Ich schlage vor, Sie tun dies:

  1. Beginnen Sie mit einem leeren Formular.
  2. Fügen Sie eine Panel hinzu.
  3. Setzen Sie die Eigenschaft Dock auf Bottom.
  4. Fügen Sie eine Button innen hinzu.
  5. Gehen Sie zu seiner Anchor Eigenschaft und deaktivieren Sie oben und links (nichts ausgewählt).
  6. Stellen Sie die Höhe des Panels ein und zentrieren Sie den Knopf horizontal.
  7. Fügen Sie eine FlowLayoutPanel in der Mitte des Formulars hinzu.
  8. Setzen Sie die Eigenschaft Dock auf Fill.

Und sonst nichts da. Dann nutzen Sie diesen Code:

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 

Danach denke ich Sie alle Details ohne Ausgabe anpassen können.

+0

var hat einen Fehler sir –

+0

Ich muss mit meinem Code-Muster bleiben, weil ich in letzter Zeit die Etiketten –

+0

später anrufen werde ich 2 Textbox haben und danach werde ich eine Nummer von 1 bis 100 eingeben und mit dieser Nummer werde ich das generierte anzeigen Nummer –