C# C绘图函数是循环的
我有一个功能,我检查一个字母是否在单词刽子手游戏中。如果不是,我将误差增加1。绘制的内容取决于错误 我的第一个问题是,当错误变为1时,函数变为循环,我创建messagebox只是为了测试,messagebox一直显示 我的第二个问题是,实际上没有画任何东西。我在课堂上有这段代码,我想把它画到一个有多个面板的面板上C# C绘图函数是循环的,c#,draw,C#,Draw,我有一个功能,我检查一个字母是否在单词刽子手游戏中。如果不是,我将误差增加1。绘制的内容取决于错误 我的第一个问题是,当错误变为1时,函数变为循环,我创建messagebox只是为了测试,messagebox一直显示 我的第二个问题是,实际上没有画任何东西。我在课堂上有这段代码,我想把它画到一个有多个面板的面板上 public void preveri() { for (int i = 0; i < posamezne_crke.Length; i++) {
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);
}
}
您应该在初始化期间订阅一次Paint事件,而不是每次检查一封信。要强制重新绘制,请调用面板上的Invalidate方法。您的变量/方法名称对我们来说基本上是胡言乱语。为了这篇文章的目的,我建议翻译它们,以便更容易理解您在代码中所做的事情。napaka的第一个价值是什么?0?如果消息框显示在窗体顶部,则会使该区域无效,导致在移动/关闭该区域时立即引发绘制事件。使用Debug.WriteLine并在Visual Studio中查看输出窗口。tnw,preveri=check,posamezne-crke=单个字母,velika-crka=大写字母,tekst=text,crka=letter,napaka是错误的,如果这有助于猜测,您是否使用相对于窗体而不是相对于面板的坐标?试试e.Graphics.DrawLine…,0,0,100,100;。尝试过,但如果panel3的值为空,我该如何修复?请确保在调用InitializeComponent后将其移动到函数,该函数只执行一次,但绘图仍然是循环的,现在绘制的内容一直闪烁