使用一些对话框来选择左,右鼠标按钮的颜色,并存储在一个类级别的变量即
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