PDA

View Full Version : سوال: ساخت PictureBox روی Form توسط موس



ali reza mansoori 2
جمعه 23 فروردین 1392, 20:46 عصر
سلام دوستان میخوام کاربر بتونه با کلیک روی فرم و درگ کردن یه pictiurebox هر اندازه که دوست داره درست کنه

Mahmoud.Afrad
جمعه 23 فروردین 1392, 21:56 عصر
Point loc;
bool isPressed;
private void FrmMain_MouseDown(object sender, MouseEventArgs e)
{
loc = e.Location;
}

private void FrmMain_MouseMove(object sender, MouseEventArgs e)
{
isPressed = (e.Button == System.Windows.Forms.MouseButtons.Left);
}

private void FrmMain_MouseUp(object sender, MouseEventArgs e)
{
if (isPressed)
{
PictureBox pic = new PictureBox();
pic.Location = loc;
pic.Size = new Size(e.X - loc.X, e.Y - loc.Y);
pic.BackColor = Color.Blue;
this.Controls.Add(pic);
isPressed = false;
}
}

ali reza mansoori 2
جمعه 23 فروردین 1392, 22:47 عصر
دوست عزیز عالیه واقعا ممنون
ولی دو تا مشکل داره
اول این که Picturebox در حال رسم شدن نمایش هم داده بشه یعنی از وقتی که کاربر کلیک رو پایین نگه داشته و موس و جابجا میکنه picturebox رسم بشه و کاربر ببینه که داره انداره اون تغییر میکنه
دوم این که از جایی که کاربر کلیک رو پایین نگه میداره بشه به سمت بالا و چپ حرکت کرد

Mahmoud.Afrad
شنبه 24 فروردین 1392, 00:41 صبح
باید 4 حالت را در نظر بگیری:

int x;
int y;
PictureBox pic;
private void FrmMain_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
pic = new PictureBox();
pic.BackColor = Color.Blue;
this.Controls.Add(pic);
}
}
private void FrmMain_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
int deltaX = e.X - x;
int deltaY = e.Y - y;

switch (deltaX >= 0)
{
case true:
if (deltaY >= 0)
{
pic.Location = new Point(x, y);
pic.Size = new Size(deltaX, deltaY);
}
else
{
pic.Location = new Point(x, e.Y);
pic.Size = new Size(deltaX, -deltaY);
}
break;

case false:
if (deltaY >= 0)
{
pic.Location = new Point(e.X, y);
pic.Size = new Size(-deltaX, deltaY);
}
else
{
pic.Location = new Point(e.X, e.Y);
pic.Size = new Size(-deltaX, -deltaY);

}
break;
}
}
}