PDA

View Full Version : سوال: رسم یک دایره در pictureBox



quantomquery
شنبه 05 اردیبهشت 1388, 15:14 عصر
سلام
می خوام یک دایره با ماوس روی pictureBox بکشیم که یک لایه روی آن ایجاد کند یعنی با کلیک دوباره روی آن وحرکت ماوس بتوانیم آن را جابجا کنیم .

prankster
شنبه 05 اردیبهشت 1388, 20:45 عصر
public partial class Form1 : Form
{
bool hasDrawn = false;
Graphics graphics;
int radius = 0;
Point center = new Point(0, 0);
Point mouseDownLocation = new Point(0, 0);

public Form1()
{
InitializeComponent();

pictureBox1.MouseDown += (sender, e) =>
{
if (!hasDrawn)
center = new Point(e.X, e.Y);
else
mouseDownLocation = new Point(e.X, e.Y);
};

pictureBox1.MouseMove += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (!hasDrawn)
{
graphics = pictureBox1.CreateGraphics();
radius = e.X - center.X;

DrawEllipse(center, radius);
}
else
DrawEllipse(new Point(center.X + (e.X - mouseDownLocation.X), center.Y + (e.Y - mouseDownLocation.Y)), radius);
}
};

pictureBox1.MouseUp += (sender, e) =>
{
if (!hasDrawn)
hasDrawn = true;
else
center = new Point(center.X + (e.X - mouseDownLocation.X), center.Y + (e.Y - mouseDownLocation.Y));
};
}

private void DrawEllipse(Point center, int radius)
{
graphics.Clear(pictureBox1.BackColor);
graphics.DrawEllipse(Pens.Black, center.X, center.Y, radius, radius);
}
}

iroonidotnet
شنبه 05 اردیبهشت 1388, 23:11 عصر
http://barnamenevis.org/forum/showpost.php?p=498569&postcount=68

quantomquery
دوشنبه 07 اردیبهشت 1388, 14:08 عصر
public partial class Form1 : Form
{
bool hasDrawn = false;
Graphics graphics;
int radius = 0;
Point center = new Point(0, 0);
Point mouseDownLocation = new Point(0, 0);

public Form1()
{
InitializeComponent();

pictureBox1.MouseDown += (sender, e) =>
{
if (!hasDrawn)
center = new Point(e.X, e.Y);
else
mouseDownLocation = new Point(e.X, e.Y);
};

pictureBox1.MouseMove += (sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
if (!hasDrawn)
{
graphics = pictureBox1.CreateGraphics();
radius = e.X - center.X;

DrawEllipse(center, radius);
}
else
DrawEllipse(new Point(center.X + (e.X - mouseDownLocation.X), center.Y + (e.Y - mouseDownLocation.Y)), radius);
}
};

pictureBox1.MouseUp += (sender, e) =>
{
if (!hasDrawn)
hasDrawn = true;
else
center = new Point(center.X + (e.X - mouseDownLocation.X), center.Y + (e.Y - mouseDownLocation.Y));
};
}

private void DrawEllipse(Point center, int radius)
{
graphics.Clear(pictureBox1.BackColor);
graphics.DrawEllipse(Pens.Black, center.X, center.Y, radius, radius);
}
}




عالی بود. متشکرم


حالا اگه بخواهیم یه مربع به این pictureBox اظافه کنیم که بعد از کشیدنش با کلیک روی هرکدام از اشکال (مربع یا دایره) بتوانیم آنها را جابجا کنیم.... چه باید کرد ؟

prankster
دوشنبه 07 اردیبهشت 1388, 15:28 عصر
خيلي راحت نيست! در اين صورت بايد دايره يا مربع يا اشياء ديگر را به صورت user control به كنترل هاي picturebox اضافه كرد، يعني هر شيئ در يك user control و با ايجاد event هاي مناسب براي هر user control امكان drag كردن آن را بوجود آورد

quantomquery
سه شنبه 08 اردیبهشت 1388, 11:46 صبح
خيلي راحت نيست! در اين صورت بايد دايره يا مربع يا اشياء ديگر را به صورت user control به كنترل هاي picturebox اضافه كرد، يعني هر شيئ در يك user control و با ايجاد event هاي مناسب براي هر user control امكان drag كردن آن را بوجود آورد


یعنی باید چی کار کنم و چطور از user control استفاده کنم ؟

اگه می شه کد بگذارید
متشکرم