2014-03-26 72 views
0

我一直在使用嵌套循環生成一組參考數字,並在組合框中已顯示他們跟着一個按鈕單擊事件,但現在我想這些數字中的每一個到一個文本框來顯示順序點擊每個按鈕。我的最終動機是在每次點擊按鈕時生成一個唯一的ID。打破基於循環解決方案在

char ch, sh; 
    int i; 
    private void button1_Click(object sender, EventArgs e) 
    { 
     for (sh = 'A'; sh <= 'Z'; sh++) 
     { 
      for (ch = 'a'; ch <= 'z'; ch++) 
      { 
       for (i = 1; i <= 9; i++) 
       { 
        comboBox1.Items.Add(i + ch.ToString()+sh.ToString()); 
       } 

      } 
     } 
    } 
+0

我不明白你在問什麼?只需要在您的文本框中顯示相同數據的代碼行? –

+0

你希望所有寫入一個文本框,或僅在組合框中選擇的一個參考數字? – payo

+0

您希望:在BTN點擊,移動comboBox1.Items [0]到textBoxN。其中n = comboBox中的項目數量? –

回答

2

所以首先我們可以創建一個迭代器塊產生的值根據您當前定義的序列:

//TODO: rename method to something meaningful 
public static IEnumerable<string> GenerateStrings() 
{ 
    for (char sh = 'A'; sh <= 'Z'; sh++) 
     for (char ch = 'a'; ch <= 'z'; ch++) 
      for (int i = 1; i <= 9; i++) 
       yield return string.Concat(i, ch, sh); 
} 

然後我們就可以創建這個序列的實例作爲一個實例字段,並得到下一個項目每次按鈕被點擊:

private IEnumerator<string> stringSequence = GenerateStrings().GetEnumerator(); 
private void button1_Click(object sender, EventArgs e) 
{ 
    if (stringSequence.MoveNext()) 
     textbox.Text = stringSequence.Current; 
} 

在一個側面說明,一般人會想,當他們完成處置IEnumerator<T>對象。雖然你當然可以處理表單的Dispose方法中的這個對象的,在這個特殊的情況下,沒有對普查員進行清理任何東西,所以它是沒有必要的,只是要小心,因爲許多普查員需要處理。

+0

精美的解釋和編碼。非常感謝..... – androidrill