2013-01-03 58 views
2

我目前正在使用c#進行初學者課程。由於老師不在,我們連續錯過了兩堂課。所以我們並沒有真正看到我們需要做什麼。他說只要去MSDN看看,但這通常對我來說太複雜了。所以這裏是我的問題:如何等待c中的單擊#

我必須創建一個「Simon Says」程序。這裏是我當前的代碼(遺憾的法國變量):

public partial class Form1 : Form 
{ 
    const byte LIMITE = 255; 
    const byte LIMITEBOUTON = 5; 
    byte[] _abyBouton = new byte[LIMITE]; 
    Random _rand = new Random(); 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    //Blinks the Button. Works correctly. 
    void AnimerBouton(Button btnBouton, Color Cocoleur) 
    { 
     btnBouton.BackColor = Color.Black; 
     btnBouton.ForeColor = Color.White; 
     Update(); 
     System.Threading.Thread.Sleep(500); // C'est inscrit en miliseconde 
     btnBouton.BackColor = Cocoleur; 
     btnBouton.ForeColor = Color.Black; 
     Update(); 
     System.Threading.Thread.Sleep(500); // C'est inscrit en miliseconde 
    } 

    private void btnDémarrer_Click(object sender, EventArgs e) 
    { 
     //Creates an array with the 255 eventual moves. 
     for (byte byIndex = 0; byIndex <= LIMITE - 1; byIndex++) 
     { 
      _abyBouton[byIndex] = (byte)_rand.Next(1, LIMITEBOUTON); 
     } 

     for (byte byIndex = 0; byIndex <= LIMITE - 1; byIndex++) 
     { 
      //Takes care of the current progress in the game. 
      for (byte byIndex2 = 0; byIndex2 <= byIndex; byIndex2++) 
      { 
       switch (_abyBouton[byIndex2]) 
       { 
        case 1: 
         { 
          AnimerBouton(btn1, Color.Green); 
         } 
         break; 
        case 2: 
         { 
          AnimerBouton(btn2, Color.Red); 
         } 
         break; 
        case 3: 
         { 
          AnimerBouton(btn3, Color.Yellow); 
         } 
         break; 
        case 4: 
         { 
          AnimerBouton(btn4, Color.Cyan); 
         } 
         break; 
       } 
       //Wait to see if the click is correct. No idea how to do this. 
      } 
     } 
    } 
} 

所以,我必須等待用戶點擊一個按鈕,看看它是否是正確的。我環顧四周,正在談論事件,但我無法掌握我需要做的事情。我將不勝感激一些關於如何做到這一點的幫助。

謝謝!

+0

http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx – Rotem

回答

8

在設計器的屬性窗口中,單擊閃電圖標。您將獲得所選控件的事件列表。確保選中btnBouton控件,並在列表中找到Click事件。您應該在下拉列表中看到btnDemarrer_Click。選擇它。現在,當按鈕被點擊時,它應該調用你的btnDemarrer_Click處理程序。

如果您還沒有編寫處理程序,可以雙擊列表中的事件,它會自動爲您生成方法框架。您也可以雙擊控件本身來爲該控件生成默認事件處理程序。 (在按鈕的情況下,我認爲默認事件是點擊事件。)

+0

請參閱圖像:http://stackoverflow.com/a/1562785/880990 –

-1

如果您想要某種方法等待某些工作完成,則可以查看AutoResetEvent。一個非常簡化例子可以幫助你在正確的軌道上:

using System.Threading; 

public static AutoResetEvent arEvent = new AutoResetEvent(false); 

static void Main() 
{ 
    DoWork(); 
    arEvent.WaitOne(); //WaitOne() "pauses" Main and waits for some work to be done. 
    DoWork(); 
    arEvent.WaitOne(); 
} 

static void DoWork(); 
{ 
    //Some work is done here. 
    arEvent.Set(); //This lets Main() continue where it left off. 
} 

利用這一點,你可以有btnDémarrer_Click等待用戶輸入,然後繼續對用戶做了他點擊後。

+0

不確定這是如何適用於所問的問題的,無論如何不確定它是否有意義。 'DoWork'運行在與WaitOne調用相同的線程中。 –

+0

@AndrewBarber這個問題問如何等待一個特定的事件(即點擊按鈕)發生。他的代碼底部的註釋行是他想要等待用戶輸入的地方。我假設收到輸入後,會繼續「btnDémarrer_Click」並根據正確的答案檢查輸入。 至於這個例子,它是非常簡化,以獲得點。 :) –

+0

OP可能是手動創建處理程序而無需訂閱事件。 –