1

これが私のコードです

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ます。次に、線とグラフが消えません ここには基本的なものがあるかもしれませんが、それが欠けていると思います。助けが必要

4

2 に答える 2

2

メニュークリックを描画しないでください。代わりにInvalidate()、後続のOnPaintオーバーライドを描画します。

于 2012-08-01T19:32:42.440 に答える
2

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);
     }
}

メソッドthis.Invalidate()内でも同様に呼び出したいと思うかもしれません。ここで移動したコードは、そのメソッドから削除する必要があることに注意してください。graphToolStripMenuItem_Click

于 2012-08-01T19:33:31.193 に答える