注
if (_leftPen != null) { _leftPen.Dispose(); }
_leftPen = new Pen(selectedColour, 1f);
すなわち1f
の厚さであることをマウスの左ボタンと右ボタンの色を選択し、クラスレベル変数にそれを保存するためにいくつかのダイアログを使用しますPen
、これはあなたの要件を満たすために変更することができます。
あなたの描画方法では_leftPen
を使用してください。次に右マウスボタンに同様のロジック、つまり_rightPen
を適用します。あなたはそれを持っています:
private Pen _leftPen = Pens.Black;
private Pen _rightPen = Pens.Red;
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
Graphics graphic = this.CreateGraphics();
graphic.DrawLine(_leftPen, e.X, e.Y, e.X + 1, e.Y + 1);
}
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
Graphics graphic = this.CreateGraphics();
graphic.DrawLine(_rightPen, e.X, e.Y, e.X + 1, e.Y + 1);
}
}
あなたがする必要があるのは、ユーザーが自分の色を選択する方法を見つけることです。
Winformsのグラフィックスの基本的なルール#1:control.CreateGraphicsを使用しないでください
また@Tawによってコメントを注意してください! Graphicsオブジェクトをキャッシュしないでください!グラフィックスg = Graphics.FromImage(bmp)を使用してビットマップbmpに描画するか、コントロールのペイントイベントでe.Graphicsパラメータを使用して描画します。システムは、すべてのコントロールのサーフェスを描画できません。コントロール;したがって、これらのサーフェスに追加したいのは、システムが呼び出す1つのイベント(Paintイベント)から作成する必要があります。
あなたはPaint
イベントで、あなたが後でこれを更新し描きたい行の位置を格納する必要がありMouseMove
イベントにコードを使用する必要があります。
private Pen _leftPen = Pens.Black;
private Pen _rightPen = Pens.Red;
private List<Point> _leftPoints = new List<Point>();
private List<Point> _rightPoints = new List<Point>();
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
_leftPoints.Add(new Point(e.X, e.Y));
}
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
_rightPoints.Add(new Point(e.X, e.Y));
}
this.Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
foreach (Point point in _leftPoints)
{
e.Graphics.DrawLine(_leftPen, point.X, point.Y, point.X + 1, point.Y + 1);
}
//Similar code for _rightPoints here
}
Invalidate
を呼び出すと、フォームは強制的に再描画されます。該当する場合は、代わりにthis.Refresh()
またはthis.Update()
を使用してください。
'CreateGraphics'とは何ですか?オフスクリーンバッファにペイントしていない場合は、ウィンドウのクライアント領域が無効になったときにユーザーのアートワークが失われます。 – Dai
@Dai i Know 私はこのコードを、自分の色を選択できるコードに変更しようとしています。 私がプロジェクトを始めたとき、このコードはまさに私が望むものでした。ペンのちょうど色... – VorTex318
Winformsのグラフィックスの基本的なルール#1: 'control.CreateGraphics'を使用しないでください! 'Graphics'オブジェクトをキャッシュしないでください! 'Graphics.g = Graphics.FromImage(bmp)'を使って 'Bitmap bmp'に描画するか、' e.Graphics'パラメータを使ってコントロールの 'Paint'イベントに描画します。すべてのコントロールを描画する必要がありますあなたがコントロールすることができない時代には、したがって、これらのサーフェスに追加したいのは、システムが呼び出すイベント(Paintイベント)から作成する必要があります。 – TaW