0

フォームをクリックしたときに、フォーム自体に長方形のグラフィックを描画する必要があるプログラムに取り組んでいます。これを行うためのコードを作成しました(以下)が、フォームのサイズを変更すると、長方形が削除されます。

フォームのサイズが変更されたときに、描画された長方形を保持するにはどうすればよいですか?

private void Form1_MouseClick(object sender, MouseEventArgs e)
{
    Graphics g = this.CreateGraphics();
    Pen Haitham = new Pen(Color.Silver, 2);
    g.FillRectangle(Haitham.Brush, new Rectangle(e.X, e.Y, 50, 50));
}
4

3 に答える 3

1

あなたはイベントで"Graphics"物事をしなければなりません。"Paint"そうすれば、ウィンドウが絵画を無効にする必要があるたびにイベントが発生するため、常に長方形を見ることができます。

乾杯

于 2012-09-19T15:10:54.590 に答える
1

代わりにこれを行うことができます:

    private List<Point> _points = new List<Point>();

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        foreach(Point point in _points)
        {
            using (Pen Haitham = new Pen(Color.Silver, 2))
            {
                e.Graphics.FillRectangle(Haitham.Brush, new Rectangle(point.X, point.Y, 50, 50));
            }
        }
    }

    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        _points.Add(new Point(e.X, e.Y));
        Invalidate(); // could be optimized to invalidate only the future rectangle draw
    }

Winformsを使用するWindows(またはネイティブWindows)では、OnPaintをオーバーライドして、ほとんどすべてのペイントロジックをそこで実行することになっています。

WPFでは、これとは異なり、要素を追加するシーンを作成することに注意してください(ここでは、たとえば、キャンバスに長方形の形状を追加します)。

于 2012-09-19T15:08:57.267 に答える
0

グラフィックについてはあまり詳しくありませんが、すべての描画オブジェクトをコンテナに入れて、フォームのサイズが変更されたときに再描画する必要があると思います。sizeChangedイベントですべての痛みを伴うオブジェクトを思い出す必要があるかもしれません。

于 2012-09-19T15:12:07.047 に答える