2

Winform アプリでいくつかのグラフィックを表示したいのですが、これは株のチャート描画ツールになります。私は(しかし、よくわかりません...)私はPictureBoxを使用し、System.Drawing.Graphicsクラスの描画プリミティブを使用してグラフを描画する必要があると思います。コーディングを開始しましたが、多かれ少なかれ機能しますが、次のようにサイズ変更機能に問題があります。フォーム全体のサイズを変更すると、プログラムがグラフィックを表示し、すぐにクリアすることがわかります。マウスの動きを止めると (マウス ボタンを放さずに)、グラフィックが消える!?!?

バグのデモを行う小さなテスト環境を作成しました。VS2005 を使用して、新しい C# Windows フォーム アプリを作成し、PictureBox のみをフォームに追加しました。PictureBox のアンカーを左、上、右、および下に設定します。Resize を PictureBox に、Paint を Form に 2 つのイベント ハンドラーを追加します。

namespace PictureBox_Resize {
public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        Ellipse_Area = this.pictureBox1.Size;
    }

    private Pen penBlack = new Pen(Color.Black, 1.0f);
    private Size Ellipse_Area;

    private void Form1_Paint(object sender, PaintEventArgs e) {
        Graphics g = this.pictureBox1.CreateGraphics();

        g.DrawEllipse(penBlack, 0, 0, Ellipse_Area.Width, Ellipse_Area.Height);
    }

    private void pictureBox1_Resize(object sender, EventArgs e) {
        Control control = (Control)sender;
        Ellipse_Area = control.Size;
        this.pictureBox1.Invalidate();
    }
}

}

この小さなアプリは問題を示しています。楕円を描くだけですが、もちろん私の描画コードはもっと複雑です...

フォームのサイズを変更すると楕円が消える理由は何ですか????

4

2 に答える 2

6

なぜあなたはを使用していPictureBoxますか?あなたのチャート用に を作成し、現在のサイズを使用して、そのメソッドでUserControl楕円を描画します。Paintそのコンストラクターで、ペイント メソッドでダブル バッファリングとすべてのペイントを行うように設定します。

this.SetStyle(ControlStyles.DoubleBuffer | 
  ControlStyles.UserPaint | 
  ControlStyles.AllPaintingInWmPaint,
  true);
于 2009-01-28T10:49:53.210 に答える
1

私が C++ 時代から覚えている限りでは (私はそのような画像を大量に作成していました)、repaintメソッドを呼び出すか、自分の動作に合わせてオーバーライドする必要があります。

于 2009-01-28T10:32:56.193 に答える