Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C绘图函数是循环的_C#_Draw - Fatal编程技术网

C# C绘图函数是循环的

C# C绘图函数是循环的,c#,draw,C#,Draw,我有一个功能,我检查一个字母是否在单词刽子手游戏中。如果不是,我将误差增加1。绘制的内容取决于错误 我的第一个问题是,当错误变为1时,函数变为循环,我创建messagebox只是为了测试,messagebox一直显示 我的第二个问题是,实际上没有画任何东西。我在课堂上有这段代码,我想把它画到一个有多个面板的面板上 public void preveri() { for (int i = 0; i < posamezne_crke.Length; i++) {

我有一个功能,我检查一个字母是否在单词刽子手游戏中。如果不是,我将误差增加1。绘制的内容取决于错误

我的第一个问题是,当错误变为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);
    }
}

您应该在初始化期间订阅一次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后将其移动到函数,该函数只执行一次,但绘图仍然是循环的,现在绘制的内容一直闪烁