نوشته شده توسط
مجتبی جوادی
دوستان عزیز درود
من یک پیکچرباکس دارم و میخوام چند خط درون آن ترسیم کنم. من میخوام با اولین کلیک روی صفحه، خط رابط بین کرسر و نقطه کلیک کرده را قبل از کلیک نقطه دوم ببینم. یعنی با حرکت موس جهت خط را بتوان دید.
امیدوارم توانسته باشم منظورم را برسانم.
با سپاس از شما
بدرود
public partial class Form1 : Form
{
private BufferedGraphics _buffer;
private Point _pos = new Point(-1, -1);
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
_pos = e.Location;
pictureBox1.Invalidate();
}
private void Form1_Load(object sender, EventArgs e)
{
using (var g = pictureBox1.CreateGraphics())
{
_buffer = BufferedGraphicsManager.Current.Allocate(g, new Rectangle(Point.Empty, pictureBox1.ClientSize));
_buffer.Graphics.Clear(pictureBox1.BackColor);
_buffer.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
}
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (_buffer == null)
{
return;
}
_buffer.Render(e.Graphics);
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
if (_pos != new Point(-1, -1))
{
var pos = pictureBox1.PointToClient(Cursor.Position);
e.Graphics.DrawLine(Pens.Blue, _pos, pos);
e.Graphics.FillEllipse(Brushes.Yellow, new Rectangle(_pos.X - 2, _pos.Y - 2, 4, 4));
e.Graphics.DrawEllipse(Pens.Black, new Rectangle(_pos.X - 2, _pos.Y - 2, 4, 4));
e.Graphics.FillEllipse(Brushes.Red, new Rectangle(pos.X - 2, pos.Y - 2, 4, 4));
e.Graphics.DrawEllipse(Pens.Black, new Rectangle(pos.X - 2, pos.Y - 2, 4, 4));
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
var pos = pictureBox1.PointToClient(Cursor.Position);
_buffer.Graphics.DrawLine(Pens.Blue, _pos, pos);
_pos = new Point(-1, -1);
pictureBox1.Invalidate();
}
}
}