Поместите PictureBox на вашу форму и установите для BackColor значение White.Затем добавьте этот код в вашу форму (вам нужно подключить события Mouse ниже, т.е. вы не можете просто скопировать и вставить этот код в вашу форму):
private Point? _Previous = null;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
_Previous = e.Location;
pictureBox1_MouseMove(sender, e);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (_Previous != null)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.DrawLine(Pens.Black, _Previous.Value, e.Location);
}
pictureBox1.Invalidate();
_Previous = e.Location;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
_Previous = null;
}
А затем отрисовать!
Если хотите, вы можете несколько улучшить качество нарисованного изображения, установив свойство SmoothingMode
объекта Graphics
.
Обновление: .Net CF делает 'у него есть коллекция Pens
, а у MoustEventArgs
нет Location
, так что вот версия, совместимая с CF:
private Point? _Previous = null;
private Pen _Pen = new Pen(Color.Black);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
_Previous = new Point(e.X, e.Y);
pictureBox1_MouseMove(sender, e);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (_Previous != null)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.DrawLine(_Pen, _Previous.Value.X, _Previous.Value.Y, e.X, e.Y);
}
pictureBox1.Invalidate();
_Previous = new Point(e.X, e.Y);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
_Previous = null;
}