system.windows.forms.painteventargsの名前空間にアクセスせずにWinFormを描画する方法は?

StackOverflow https://stackoverflow.com/questions/7807671

質問

プログラムでこれまでに行ったことを形成すると、Winformに何かを描く唯一の方法は、system.windows.forms.painteventargsを使用することです。これらの引数またはこの名前空間にアクセスできない場合、Winformにのみアクセスできる場合は、Winformでどのように(長方形のような形状)を描画しますか。

前もって感謝します。

役に立ちましたか?

解決

の外側のフォーム(またはその他のコントロール)を描きたい場合 Paint イベント、あなたは取得する必要があります Graphics そのコントロールのオブジェクト。その後、心のコンテンツにペイントできます。ただし、次にペイントメッセージが登場したときに、描いたものは消去される可能性が高いことに注意してください。

フォームを描くには:

using (Graphics g = this.CreateGraphics())
{
    // do all your drawing here
}

他のヒント

PaintEventargsはクラスです の中に System.Windows.Forms namespace. 。フォームを使用している場合、名前空間とクラスにアクセスできることを意味しますが、描画しようとしているフォームのコードにアクセスできない場合があります...

フォームのソースコードにアクセスできない場合でも、ペイントイベントは公開されており、フォーム以外のコードからハンドラーを登録できます。 (これがあなたの問題だと思います。)

フォームへの参照があるこの単純な例クラスを参照し、ペイントハンドラーに登録してから、任意の図面を実行します。

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    class Painter {
        public Painter(Form form) {
            form.Paint += new PaintEventHandler(form_Paint);
        }

        void form_Paint(object sender, PaintEventArgs e) {
            e.Graphics.DrawLine(Pens.Black, 0, 0, 20, 20);
        }
    }
}

このスニペットの重要な概念は、フォーム(またはコントロール由来のオブジェクト)への参照がある場合、コントロールを塗り直す必要があるときにいつでも自動的に呼ばれるペイントイベントに登録できることです(そして、必要なものを描くことができますそのコントロールについて。)

スニペットでは、コンストラクターにフォームを渡し、ペイントイベントに登録しましたが、簡単な例でした。コードの構造は異なりますが、...フォームがあり、イベントに登録してから絵を描く方法を作成する初期化ステップがあります。

独自のグラフィックオブジェクトを作成および処分することで、他の方法を描くことができますが、これは好ましい方法ではありません。 1つは、ウィンドウを再描画する必要がある場合に通知されず、タイマー(非常にシンプルで醜い例として)などの他のメカニズムを作成する必要があり、グラフィックスオブジェクトを自分で管理する必要があります。

君は 得る を購読することにより、それらにアクセスします Control.Paint イベント、サブスクライブしたイベントハンドラー内ですべての図面を実行します。関連するものが提供されます PaintEventArgs.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top