私はmsペイントに似た小さなペイントプログラムに取り組んでいます。現在、「select関数」を実装しようとしています。ちらつきの問題に直面しているので、いくつかの調査を行ったところ、独自のPanelクラスを作成する必要があることがわかりました。
public class MyDisplay : Panel
{
public MyDisplay()
{
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.ContainerControl |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.SupportsTransparentBackColor
, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();
}
}
メインフォームには次のフィールドがあります。
MyDisplay panel1 = new MyDisplay();
Graphics graphics1 = panel1.CreateGraphics();
パネルで3つのイベントを使用します。
- MouseDown-ここに到達ポイントp1
- MouseMove-ちらつきの問題が発生する場所で、電話をかけていて
graphics1.drawRectangle(...)
、graphics1.Clear()
クリックするたびにマウスが移動します - MouseUp-最後に長方形を描画します。
それのどこが悪いんだい?パネル全体が白く、長方形が1つしかないのに、ちらつきの問題が発生するのはなぜですか?ありがとうございました。
編集:
OnPaintメソッドを上書きしましたが、次に何をすべきかまだわかりません。
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
// Call methods of the System.Drawing.Graphics object.
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
}
edit2:ビットマップ/画像にペイントし、OnPaintメソッドをオーバーライドして、そこから画像をコピーしてパネルに貼り付ける必要がありますか?