使用一些對話框來選擇左,右鼠標按鈕的顏色,並存儲在一個類級別的變量即
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);
}
}
所有你需要做的就是爲用戶找到一個方式來選擇自己的顏色。
還注意到,由於@Taw評論:
的WinForms圖形基本規則#1:不要使用control.CreateGraphics!切勿嘗試緩存Graphics對象!可以使用Graphics g = Graphics.FromImage(bmp)或者在控件的Paint事件中使用e.Graphics參數來繪製位圖bmp ..系統需要繪製所有控件的表面,控制;因此您想添加到這些表面的所有內容都必須由系統將調用的一個事件(即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
@戴我知道 我只是想改變這段代碼,以代碼,用戶可以選擇自己的顏色。 當我開始項目時,這段代碼正是我想要的。只是筆的顏色... – VorTex318
Winforms圖形基本規則#1: 千萬不要使用'control.CreateGraphics'!切勿嘗試緩存'Graphics'對象!使用'Graphics g = Graphics.FromImage(bmp)'或者在控件的'Paint'事件中使用'e.Graphics'參數來繪製一個'Bitmap bmp'。系統需要繪製所有的控件'有時你無法控制的表面;因此所有你想要添加到這些表面的東西都必須從系統調用的一個事件中創建,這就是'Paint'事件。 – TaW