PDA

View Full Version : سوال: حرکت دادن فرم با کد



ahrimaneahurai
پنج شنبه 02 دی 1389, 12:17 عصر
سلام
دوستان من فرمم رو طوری کردم که منوی بالاش نیست (WindowStyle="None")
حالا می خوام با وقتی کاربر روی یکی از دکمه هام کلیک کرد بتونه با گرفتن اون فرم رو تکون بده
قبلا توی برنامه های سی شارپ از این کد استفاده می کردم اما الان جواب نمیده
ممنون میشم کمک کنید

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
int Msg, int wParam, int lParam);

[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();


private void userControl11_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}

مهدی فرزاد
پنج شنبه 02 دی 1389, 13:27 عصر
سلام
توی پست آموزشهای من (در لینک توی امضام)
آخرین آموزش یعنی آموزش نهم یک فایل ضمیمه داره توی اون فایل من همین کار رو کردم و برای کلییه اعمال ویندوز یک کلاس درست کردم
من یک نمونه ساده الان برات مینویسم

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();
}
به همین سادگی
اما در کل اون ضمیمه خیلی کامله و در موارد بیشتر کمکت میکنه

ahrimaneahurai
پنج شنبه 02 دی 1389, 13:51 عصر
دوست عزیز من همین کدی که شما دادید رو استفاده کردم اما کار نمی کنه
من روی textblock گذاشتم که وقتی روی textblock کلیک چپ رو نگه داشت و موس رو تکون داد فرمم تکون بخوره اما نشد
مشکل از کجاست ؟
باز هم ممنون

private void CalenderText_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Window window = ((FrameworkElement)sender).TemplatedParent as Window;
if (window != null)
{
// drag window
window.DragMove();
}
}

ahrimaneahurai
پنج شنبه 02 دی 1389, 13:52 عصر
حتی روی border هم گذاشتم عمل نکرد

ahrimaneahurai
پنج شنبه 02 دی 1389, 14:09 عصر
من به جای این کدی که شما دادید که بردر رو به عنوان ویندوز نشون میداد

Window window = ((FrameworkElement)sender).TemplatedParent as Window;
کد زیر رو نوشتم اما بازم ویندو رو null نشون میده

var win = sender as Window;

مهدی فرزاد
پنج شنبه 02 دی 1389, 17:13 عصر
سلام مجدد
ببین دوست من اون کدها که من نوشتم برای حالتی هست که من برای ویندوز استایل تعریف کردم
شما برای برنامه خودتون نیاز نیست Window window = ((FrameworkElement)sender).TemplatedParent as Window رو بنویسید
فقط توی متد MouseLeftButtonDown تکس بلاکتون بنویسید

this.DragMove();
اگر هم Border دارید و میخواید برای Border این کد رو بنویسیدبازم فرقی نمیکنه توی متد MouseLeftButtonDown مربوط به border همین کد رو بنویسید

اینم مثال ضمیمه توی مثال textblock قرمز رو با موس بگیرید و موس رو حرکت بدید