2014-10-01 132 views
0

我有一個函數,我檢查一個字母是否在word-hangman遊戲中。如果不是這樣,我會將錯誤增加1.正在繪製的內容取決於錯誤。C#繪圖功能循環

我的第一個問題是,當錯誤變爲1時,函數變爲循環(我創建的messagebox僅用於測試,並且messagebox始終顯示)。

我的第二個問題是沒有任何實際繪製。我在課堂上有這樣的代碼,我希望它可以繪製到一個面板(我有多個面板)。

public void preveri() 
{ 
    for (int i = 0; i < posamezne_crke.Length; i++) 
    { 
     velika_crka = Char.ToUpper(posamezne_crke[i]).ToString(); 
     if(tekst[i].Text == "_") 
     { 
      if (crka == velika_crka) 
      { 
       tekst[i].Text = crka; 
       break; 
      } 
      else 
      { 
       napaka++; 
       break; 
      } 
     } 
    } 
    form1.panel3_vislice.Paint += Form1_Paint; //writed here,beacouse if its on top panel3  value is null 
} 

public void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) 
{ 
    if (napaka >= 1) 
    { 
     MessageBox.Show(napaka.ToString() + "a"); //just for testing 
     e.Graphics.DrawLine(new Pen(Color.Black, 2), 85, 190, 210, 190); 
    } 
    if (napaka >= 2) 
    { 
     MessageBox.Show(napaka.ToString() + "s"); //just for testing 
     e.Graphics.DrawLine(new Pen(Color.Black, 2), 148, 190, 148, 50); 
    } 
} 
+3

您的變量/方法名稱對我們來說基本上是無稽之談。我建議將它們翻譯爲本文的目的,以便更容易理解您在代碼中所做的事情。 – tnw 2014-10-01 13:39:11

+0

napaka的第一個價值是什麼? 0? – 2014-10-01 13:40:23

+2

如果消息框顯示在窗體的頂部,它會使區域無效,導致在移動/關閉它時立即引發「Paint」事件。改爲使用'Debug.WriteLine()'並在Visual Studio中觀察「輸出」窗口。 – 2014-10-01 13:40:25

回答

0

您應該在初始化期間只訂閱一次Paint事件,而不是每次檢查一封信時。要強制重新繪製,請調用面板上的Invalidate()方法。

+0

試過,但是,如果panel3的值爲空,那我該如何解決呢? – user3062657 2014-10-01 14:14:57

+0

確保它是在調用InitializeComponent()之後的 – 2014-10-01 14:49:58

+0

將它移動到只能執行一次但繪圖仍然循環且現在繪製的函數只是一直閃爍 – user3062657 2014-10-01 15:33:31