2015-02-11 171 views
-1

設置隨機名稱按鈕我試圖創造記憶的益智遊戲。我想在表單加載時隨機設置圖片按鈕。但我無法實現它。在Windows窗體

我想隨機基於數量的隨機數分配給20個按鍵在我的形式,併爲它們分配圖像。

這是我試過的。

private void Form1_Load(object sender, EventArgs e) 
{ 
    Button button = new Button(); 
    Random rnd = new Random(); 
    int number = 0; 

    foreach (Control item in Controls) 
    { 
     number = rnd.Next(1, 20); 
     button.Name = number.ToString(); 
    } 

    if (button.Name == 1.ToString() || button.Name == 2.ToString()) 
    { 
     Icon myIcon = (Icon)Resources.ResourceManager.GetObject(
         @"C:\Users\richa\Desktop\Goat.png"); 
     button.Image = myIcon.ToBitmap(); 
    } 
} 

也是我設置圖像正確的方式上按鈕?

+0

代替'button.Name' – chouaib 2015-02-11 05:59:34

+0

@chouaib我不希望顯示在按鈕上的文字 – Richa 2015-02-11 06:00:21

+0

看到我的回答波紋管 – chouaib 2015-02-11 06:02:51

回答

1

然後你可以使用Tag

button.Tag = number.ToString(); 

Convert.ToInt32(button.Tag) == 1 

編輯

private void Form1_Load(object sender, EventArgs e) 
{ 
    Random rnd = new Random(); 
    bool[] used = new bool[20]; 
    int number = 0; 

    // if you have your buttons created in a container (groupbox for example) 
    foreach (var btn in container.Controls) 
    { 
     number = rnd.Next(1, 20); 
     while(used[number]) 
     { 
      number = rnd.Next(1,20); 
     } 
     ((Button)btn).Tag = number.ToString(); 
     used[number] = true; 

     // add goat.png to your resources beforehand 
     // right click your project --> properties --> resources --> add resource --> add existing file --> select goat.png, and rename it to GoatImg 
     if (number == 1 || number == 2) 
     { 
      btn.Image = Properties.Resources.GoatImg; 
     } 
    } 

} 
+0

的問題是在我的foreach猜,我希望所有的20鍵具有不同的ID或文本。但我猜是相同的文字和名稱設置爲所有按鈕 – Richa 2015-02-11 06:03:11

+0

@Richa,看到編輯,你現在會設置不同的ID爲每個按鈕,然後檢查自己的ID是'1'或者'2'並指定圖像 – chouaib 2015-02-11 06:21:03

+0

隨機。接下來(1,20)並不保證您會在20次迭代中獲得20個不同的數字。 – 2015-02-11 06:23:35

-2

可以使用GUID排序。

 Dictionary<int, Guid> dic = new Dictionary<int, Guid>(); 
     int i = 0; 
     while (i < 20) 
     { 
      dic.Add(i, Guid.NewGuid()); 
      i++; 
     } 
     // Now order by the guid. 
     var newDic = dic.OrderByDescending(item => item.Value).ToDictionary(kvp => kvp.Value, kvp => kvp.Key); 

     int iSetter = 0; 
     foreach (Control item in Controls) 
     { 
      Button button = new Button(); 
      int number = newDic.ElementAt(iSetter++).Value; 
      button.Name = number.ToString(); 

      if (button.Name == 1.ToString() || button.Name == 2.ToString()) 
      { 
       Icon myIcon = (Icon)Resources.ResourceManager.GetObject(@"C:\Users\richa\Desktop\Goat.png"); 
       button.Image = myIcon.ToBitmap(); 
      } 

      Controls.Add(button); 
     } 
2

你應該有按鈕的數組,並可能像陣列以隨機:

public void PutRandomImagesOnButtons(Button[] buttons, Bitmap[] images) 
{ 
    var rand = new Random(); 

    foreach (var btn in buttons) 
    { 
     btn.BackgroundImage = images[rand.Next(images.Length)]; 
    } 
} 

對於一個新手,我建議手動創建的20個按鍵,然後創建用下面的代碼數組:

private Button[] _btns; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    this._btns = new Button[] 
       { 
        this.btn1, this.btn2, this.btn3, ... 
       }; 
} 

套用同樣的邏輯有圖像陣列,並呼籲PutRandomImagesOnButtons(this._btns, this._images)末(或只要你想,真的)。

對於更高級的閱讀,搜索動態創建和添加控件,並不可避免地對FlowLayoutPanel它可以幫助你安排的動態控制。

https://msdn.microsoft.com/en-us/library/aa287574%28v=vs.71%29.aspx

http://visualcsharptutorials.com/windows-forms/dynamically-adding-controls

嘗試`button.Text`的

https://www.youtube.com/watch?v=NxfYFAw0JDs