c# - 如果窗体上没有其他控件,图表就会消失

标签 c# system.drawing

这是我的代码

private void graphToolStripMenuItem_Click(object sender, EventArgs e)
        {

            button1.Visible = false;
            button2.Visible = false;
            button3.Visible = false;
            button4.Visible = false;
            label1.Visible = false;
            textBox1.Visible = false;
            textBox2.Visible = false;
            textBox3.Visible = false;
            textBox4.Visible = false;
            textBox5.Visible = false;
            textBox6.Visible = false;
            textBox7.Visible = false;
            textBox8.Visible = false;
            textBox9.Visible = false;
            textBox10.Visible = false;
            label2.Visible = false;
            label3.Visible = false;
            label4.Visible = true;
            gg = this.CreateGraphics();
            p3 = new Pen(Color.Blue,5);
            b1 = new SolidBrush(Color.Red);
            p2 = new Pen(Color.Red);
            Font f=new Font("Arial",16);
            float ox = this.ClientSize.Width / 2;
            float oy = this.ClientSize.Height / 2;
            gg.DrawLine(p3, ox - 500, oy, ox + 500, oy);
            gg.DrawLine(p3, ox, oy + 300, ox, oy - 300);
            gg.DrawString("Argument", f, b1, ox - 100, oy - 200);
            gg.DrawString("<----f(Argument)---->", f, b1, ox + 100, oy + 100);
            for (int i = 0; i < 1000; i++)
            {
                double tem1 = graphValuesCal();
                double temp2 = functionCal();
                gg.FillEllipse(b1, ox + (float)tem1/2,oy-20*(float)temp2, (float)5, (float)5);
                Thread.Sleep(10);
            }

        }

当我运行这段代码时,图形被绘制出来,但是当循环完成图形以及字符串和线(轴)消失时。如果我注释掉这段代码

                button1.Visible = false;
                button2.Visible = false;
                button3.Visible = false;
                button4.Visible = false;
                label1.Visible = false;
                textBox1.Visible = false;
                textBox2.Visible = false;
                textBox3.Visible = false;
                textBox4.Visible = false;
                textBox5.Visible = false;
                textBox6.Visible = false;
                textBox7.Visible = false;
                textBox8.Visible = false;
                textBox9.Visible = false;
                textBox10.Visible = false;
                label2.Visible = false;
                label3.Visible = false;

意味着如果所有这些控件之前都是可见的,那么当我单击 Graph menu 项时它们将保持可见。然后线条和图形不会消失 这里可能有一些基本的东西,但我想我错过了那个。 需要帮助

最佳答案

您的绘图应该在 OnPaint 事件方法中完成。

在你的窗体上加入 OnPaint 事件并将你的绘画添加到该方法中,如下所示:

// Put this in your constructor, or use VisualStudio to create the method for you
this.Paint += new System.Windows.Forms.PaintEventHandler(this.paint_Method);

private void paint_Method(object sender, PaintEventArgs e)
{ 
     gg = e.Graphics;
     p3 = new Pen(Color.Blue,5);
     b1 = new SolidBrush(Color.Red);
     p2 = new Pen(Color.Red);
     Font f=new Font("Arial",16);
     float ox = this.ClientSize.Width / 2;
     float oy = this.ClientSize.Height / 2;
     gg.DrawLine(p3, ox - 500, oy, ox + 500, oy);
     gg.DrawLine(p3, ox, oy + 300, ox, oy - 300);
     gg.DrawString("Argument", f, b1, ox - 100, oy - 200);
     gg.DrawString("<----f(Argument)---->", f, b1, ox + 100, oy + 100);
     for (int i = 0; i < 1000; i++)
     {
         double tem1 = graphValuesCal();
         double temp2 = functionCal();
         gg.FillEllipse(b1, ox + (float)tem1/2,oy-20*(float)temp2, 5f, 5f);
         // Thread.Sleep(10);
     }
}

您可能还想在 graphToolStripMenuItem_Click 方法中调用 this.Invalidate(),请记住,我移至此处的代码应该从该方法中删除.

关于c# - 如果窗体上没有其他控件,图表就会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766191/

相关文章:

c# - 如何在程序后台运行时显示通知?

c# - 删除图像c#的圆形透明部分

.net - 使用Shapes派生对象代替Visual派生对象造成的性能下降有多大

asp.net - System.Drawing:GDI+ 未正确初始化(​内部 GDI+ 错误​)

c# - Specflow - 作为功能文件/BDD 的一部分涵盖的测试类型是什么

时间:2019-05-17 标签:c# "as"vs "()"conversion

C# - 如果用户在插入记录后刷新页面,则会创建重复记录。我怎样才能防止这种情况发生?

c# - LINQ:搜索对象列表的多个字段,其中字段可以为空

.net - 尝试迭代 System.Drawing.Image 中的帧,引发无效参数异常

c# - 三角形列表的路径 (.NET/C#)