PDA

View Full Version : حرکت کنترل با ماوس هنگام اجرا



aliblue
پنج شنبه 25 فروردین 1390, 19:31 عصر
اگر بخواهیم هنگام اجرا با کلیک کردن روی کنترل و کشیدن آن را حرکت دهیم آیا دستور خاصی وجود دارد؟کد زیر را نوشتم و به خوبی عمل می کند اما دو اشکال ممکن است پیش بیاید که در ادامه به آن می پردازم.


private void button1_MouseDown(object sender, MouseEventArgs e)
{

f = true;
btnx1 = button1.Left;
btny1 = button1.Top;
mx1 = MousePosition.X;
my1 = MousePosition.Y;

}

private void button1_MouseUp(object sender, MouseEventArgs e)
{
f = false;
}

private void timer1_Tick(object sender, EventArgs e)
{
if (f)
{
button1.Left = btnx1 + MousePosition.X - mx1;
button1.Top = btny1 + MousePosition.Y - my1;
}
}

1-اگر بخواهیم برای کنترل های دیگر هم این کار را انجام دهیم خیلی طولانی می شود.
2-حرکت در واحد زمانی که در Interval تعیین کرده ایم انجام می شود و حتی اگر آن را روی 1 بگذاریم
باز هم کمی کند حرکت می کند و از نشانگر ماوس جا می ماند.
کسی می داند که چه کار باید کرد؟

habib_namvar
پنج شنبه 25 فروردین 1390, 22:56 عصر
void txt_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
((TextBox)sender).Left += (e.X - ((TextBox)sender).Width / 2);
((TextBox)sender).Top += (e.Y - ((TextBox)sender).Height / 2);
}
}
شما مثلا اگه بخوایید برای تکست باکس این کارو کنید کل تکست باکساتونو انتخاب میکنید بعد روی رویداد موس موو کلیک میکنید بعد کد بالا رو مینویسید

aliblue
جمعه 26 فروردین 1390, 10:44 صبح
با تشکر از پاسخ شما دوست عزیز.
اگر بخواهیم هنگام اجرا وقتی که کاربر روی دکمه Add کلیک می کند یک کنترل مثلا TextBox ایجاد شود که هر یک از این TextBoxهای ایجاد شده در زمان اجرا
این امکان جابه جایی با ماوس را داشته باشند چه کار باید بکنیم؟

mmd2009
جمعه 26 فروردین 1390, 11:06 صبح
با سلام.

دوست عزیز یک مثال برات زدم :


private void button1_Click(object sender, EventArgs e)
{
int X = 100;

for (int i = 0; i <= 2; i++)
{
TextBox txt = new TextBox();

txt.Location = new Point(X, 200);

txt.Name = "text" + i.ToString();

this.Controls.Add(txt);

txt.MouseMove += new MouseEventHandler(txt_MouseMove);

X += 100;
}
}

private void txt_MouseMove(Object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
((TextBox)sender).Left += (e.X - ((TextBox)sender).Width / 2);
((TextBox)sender).Top += (e.Y - ((TextBox)sender).Height / 2);
}
}

shadi khanum
جمعه 26 فروردین 1390, 11:17 صبح
باید تابع مورد نظر رو قبلا نوشته باشی تو کد و موقع ایجاد کنترل جدید ، رویدادهای مورد نظر رو AddHandle کنی واسش

shadi khanum
جمعه 26 فروردین 1390, 11:21 صبح
این Sample رو هم ببین، واسه حرکت دادن هر کنترلی روی صفحه است. مشکلاتی که گفتی رو هم نداره