سلام خدمت دوستان عزیز، به درخواست یکی از دوستای عزیزمون به نام Prshacker تصمیم گرفتم این پست رو بنویسم. توو این پست میگم که چطور بتونین با استفاده از همه ی قسمت یک فرم، فرم رو درگ و جابه جا کنین، این کار برای مواقعی ضروری میشه که خاصیت Form Border Style رو برابر None قرار بدین...
این کار دو راه داره، اولین راه نیاز به ادد کردن API یا کتابخونه داره، دومین راه نه نیازی به این کار نیست، هردو روش رو خدمتتون عرض میکنم.
روش اول:
اول کتابخونه زیر رو اضافه کنین:
using System.Runtime.InteropServices;
بعد کد زیر رو بنویسین:
[DllImport("user32.dll")] static extern int ReleaseCapture(); [DllImport("user32.dll", EntryPoint ="SendMessageA")] static extern int SendMessage(int hwnd, intwMsg, int wParam, object lParam); private const int WM_NCLBUTTONDOWN = 161; private void Form1_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessage(this.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0); }
دقت کنین که با توجه به کد بالا، دو خط آخر رو باید در قسمت MouseDown بنویسین که در قسمت Event این خاصیت رو ادد کنین...
خب این راه اول بود، حالا روش دوم بدون نیاز به ادد کردن API
روش دوم:
کد زیر رو بنویسین:
private bool dragging; private Point pointClicked; private void Form1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { dragging = true; pointClicked = new Point(e.X, e.Y); } else { dragging = false; } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (dragging) { Point pointMoveTo; pointMoveTo = this.PointToScreen(newPoint(e.X, e.Y)); pointMoveTo.Offset(-pointClicked.X, -pointClicked.Y); this.Location = pointMoveTo; } } private void Form1_MouseUp(object sender, MouseEventArgs e) { dragging = false; }
خب اینجا هم علاوه بر خاصیتی که بالا گفتم باید MouesMove و MouseUp رو هم ادد کنین.
حله حالا میتونین توسط هرقسمتی از فرم که خواستین، فرم رو جابه جا یا درگ کنین...
سوالی چیزی بود درخدمتیم...
ایرانی همیشه سرافراز
بسیار عالی