2016-08-05 35 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,並使用該數字我將顯示生成的號碼 –

相關問題