0

私はpictureBox1ペイントイベントを持っています。ペイントイベントで、テキストファイルにいくつかの情報を書き込んでいます:

    private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
            {
                SolidBrush brush;
                Pen p=null;
               Point connectionPointStart;
               Point connectionPointEnd;
               Graphics g = e.Graphics;
               g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

                   brush = new SolidBrush(Color.Red);
                   p = new Pen(brush);
                   for (int idx = 0; idx < wireObject1._point_X.Count; ++idx)
                   {
                       Point dPoint = new Point((int)wireObject1._point_X[idx], (int)wireObject1._point_Y[idx]);
                       dPoint.X = dPoint.X - 5; // was - 2
                       dPoint.Y = dPoint.Y - 5; // was - 2
                       Rectangle rect = new Rectangle(dPoint, new Size(10, 10));
                       g.FillEllipse(brush, rect);

                       // g.FillEllipse(brush, rect);
                   }

                   for (int i = 0; i < wireObject1._connectionstart.Count; i++)
                   {

                       int startIndex = wireObject1._connectionstart[i];
                       int endIndex = wireObject1._connectionend[i];



                       connectionPointStart = new Point((int)wireObject1._point_X[startIndex], (int)wireObject1._point_Y[startIndex]);
                       connectionPointEnd = new Point((int)wireObject1._point_X[endIndex], (int)wireObject1._point_Y[endIndex]);
                       p.Width = 4;
                       g.DrawLine(p, connectionPointStart, connectionPointEnd);
                       moveCounter++;
                       textBox1.Text = moveCounter.ToString();
                       if (moveCounter > 10)
                       {
                           w.WriteLine("Number Of Moves ===>   " + moveCounter);
                       }
                   }

            }

In the bottom i have a w.WriteLine....
In the top of Form1 i did StreamWriter w;
In the constructor i did: w = new StreamWriter(@"d:\test.txt");

In the pictureBox1 mouse up event im doing w.Close();

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
            {

                if (mouseMove == true)
                {
                    Point NewPoint = e.Location;
                    wireObject1._point_X[(int)selectedIndex] = NewPoint.X;
                    wireObject1._point_Y[(int)selectedIndex] = NewPoint.Y;
                    mouseMove = false;
                    if (moveCounter == 0)
                    {
                    }
                    else
                    {
                        w.Close();
                    }
                    WireObjectCoordinatesCloneFrame();

                }

            }

だから私はマウスを動かしてその記録をファイルに書き込んで、int型の変数moveCounterからの情報を書き込んでいます。

問題は、マウスアップイベントを作成し、pictureBox1 のファイルを閉じると、白い背景に大きな赤い X が表示されることです。それ自体のファイルは、必要なすべての情報を含むハードディスク上で問題ありません。

しかし、なぜ大きな赤い x が pictureBox1 に表示されるのでしょうか? ペイント イベントから w.WriteLine を削除すると、大きな赤い x が表示されなくなります。

それを解決するために私は何ができますか?

4

1 に答える 1

2

ストリーム ライターを閉じた後も、ペイント イベントでストリーム ライターに書き込もうとしています。これは失敗します (閉じたストリームに書き込むことはできません)。そのため、ペイント イベント ハンドラーは例外をスローし、赤い X が表示されます。

正直に言うと、ペイント イベント中に IO を実行するのは非常に奇妙です...実際に何を達成しようとしているのですか?

于 2012-06-25T22:44:06.707 に答える