mahtab2009
Member
سلام
من تو محیط ویژوال به زبان #C برای ترسیم به مشکل برخوردم.
یه PictureBox دارم که می خوام ترسیمات روی اون نمایش داده بشه ولی نمی خوام مستقیم روی خود PictureBox عمل رسم انجام بشه. یه متغیر از نوع Bitmap معرفی کردم که شکل رسم شده رو به اون نسبت میدم و بعد هر چی توی اون Bitmap هست در PictureBox نمایش داده میشه.
مشکل اینه که چون رسم در MouseMove مربوط به PictureBox انجام میشه اگه بخوام مثلا یه مستطیل بدون پرکننده رسم کنم موقع درگ ماوس مدام مستطیل رسم میشه تا به نقطه انتهایی و MouseUp برسم. لطفا کدی که نوشتم رو بخونین و راهنماییم کنین.
خیلی خیلی ممنون
من تو محیط ویژوال به زبان #C برای ترسیم به مشکل برخوردم.
یه PictureBox دارم که می خوام ترسیمات روی اون نمایش داده بشه ولی نمی خوام مستقیم روی خود PictureBox عمل رسم انجام بشه. یه متغیر از نوع Bitmap معرفی کردم که شکل رسم شده رو به اون نسبت میدم و بعد هر چی توی اون Bitmap هست در PictureBox نمایش داده میشه.
مشکل اینه که چون رسم در MouseMove مربوط به PictureBox انجام میشه اگه بخوام مثلا یه مستطیل بدون پرکننده رسم کنم موقع درگ ماوس مدام مستطیل رسم میشه تا به نقطه انتهایی و MouseUp برسم. لطفا کدی که نوشتم رو بخونین و راهنماییم کنین.
خیلی خیلی ممنون
کد:
void New()
{
pic = null;
pic = new Bitmap(pictureBox1.Width, pictureBox1.Height);
g = Graphics.FromImage(pic);
g.FillRectangle(Brushes.White, new Rectangle(0, 0, pic.Width, pic.Height));
pictureBox1.Image = pic;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
toolStripStatusLabel1.Text = e.X+","+e.Y+" px";
try
{
if (draw)
{
x1 = e.X;
y1 = e.Y;
width = Math.Abs(startX - x1);
height = Math.Abs(startY - y1);
switch (state)
{
case "FillRect":
b.Color = background.BackColor;
g.FillRectangle(b, startX, startY, width, height);
g.DrawRectangle(p, startX, startY, width, height);
pictureBox1.Image = pic;
break;
case "Rect":
g.DrawRectangle(p, startX, startY, x1, y1);
pictureBox1.Image = pic;
break;
case "FillCirc":
break;
case "Circ":
break;
case "Arc":
break;
case "Line":
break;
case "Pencil":
break;
case "Text":
break;
case "Eraser":
break;
}
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
draw = true;
startX = e.X;
startY = e.Y;
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
draw = false;
}