2014-10-01 131 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