PDA

View Full Version : چگونگی جلوگیری از حرکت دادن و جابجا کردن فرم در صفحه توسط کاربر در زمان اجرای برنامه



iranigirl1364
سه شنبه 27 آذر 1386, 09:51 صبح
با سلام :
می خواستم بدونم چه طوری می شه از حرکت دادن و جابجا کردن فرم فعال در صفحه توسط کاربر در زمان اجرای برنامه جلوگیری کرد؟یا بهتره بگم یه جورایی فرم رو همون جایی که مد نظر من است و من تعیین کرد ثابت باشه یا Fix باشه؟
با تشکر

hassan razavi
سه شنبه 27 آذر 1386, 10:11 صبح
از رویداد move فرم استفاده کنید و یا خاصیت FormBorderStyle را none کنید خودتون یه TitleBar برا فرمتون طراحی کنید

babak23
سه شنبه 27 آذر 1386, 10:28 صبح
//using System.Runtime.InteropServices;
//...........................................
privateconstInt32 SC_MOVE = 0xf010;
privateconstInt32 MF_BYCOMMAND = 0x00000000;
[DllImport("user32.dll")]
privatestaticexternIntPtr GetSystemMenu(IntPtr hWnd, Boolean bRevert);
[DllImport("user32.dll")]
privatestaticexternBoolean RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);

rohullah
سه شنبه 27 آذر 1386, 10:43 صبح
اینم جواب میده:

[SuppressUnmanagedCodeSecurity]

internal static class UnsafeNativeMethods
{

[DllImport("user32.dll", CharSet = CharSet.Auto)]

public static extern IntPtr DefWindowProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

}

protected override void WndProc(ref Message m)
{

const int WM_NCHITTEST = 0x0084;

const int HTBORDER = 18;

const int HTCAPTION = 2;



if (m.Msg == WM_NCHITTEST)
{

IntPtr result = UnsafeNativeMethods.DefWindowProc(this.Handle, m.Msg, m.WParam, m.LParam);

int location = result.ToInt32();

switch (location)
{

case HTCAPTION:

// tell Windows a border was encountered instead

// so it won't start the drag-move process.

m.Result = new IntPtr(HTBORDER);

break;

default:

base.WndProc(ref m);

break;

}

}

else
{

base.WndProc(ref m);

}

}
البته باید این دو تا رو اضافه کنی:

using System.Security;
using System.Runtime.InteropServices;
و صد البته که کدشو از http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=934125&SiteID=1
اینجا گرفتم

iranigirl1364
سه شنبه 27 آذر 1386, 18:41 عصر
آقای Rohullah:
من دقیقا کد شما رو توی برنامه ام کپی کردم اما روی خط

(protected override void WndProc (ref Message m

Error زیر رو میده :

Message is a namespace but is used like a type

ممکنه منو راهنمایی کنید
با تشکر

rohullah
چهارشنبه 28 آذر 1386, 09:48 صبح
فایل ضمیمه رو تست کن بدون هیچ مشکلی کار می کنه اگه بازم مشکل داشتی یه تیکه از کدت رو بزار.

اَرژنگ
چهارشنبه 28 آذر 1386, 10:15 صبح
فایل ضمیمه رو تست کن بدون هیچ مشکلی کار می کنه اگه بازم مشکل داشتی یه تیکه از کدت رو بزار.




با تشکر از شما،
مثال شما یکمقداری کدش زیادی پیچیده بود با اجازه تان مثال ساده‌تر ضمیمه شده.

iranigirl1364
چهارشنبه 28 آذر 1386, 17:11 عصر
با تشکر از تمامی دوستان:
این فایل ضمیمه رو لطفا ببینید.
توی این فایل توضیح دادم علت این Error که قبلا هم اینجا نوشته بودم چیه.
کد هیچ کدام از شما ایرادی نداره و همینطور هیچ نوع پیچیدگی.لطفا به برنامه نگاهی بیندازید , مطمئنا متوجه منظور من خواهید شد.
با تشکر

اَرژنگ
چهارشنبه 28 آذر 1386, 17:29 عصر
با تشکر از تمامی دوستان:
این فایل ضمیمه رو لطفا ببینید.
توی این فایل توضیح دادم علت این Error که قبلا هم اینجا نوشته بودم چیه.
کد هیچ کدام از شما ایرادی نداره و همینطور هیچ نوع پیچیدگی.لطفا به برنامه نگاهی بیندازید , مطمئنا متوجه منظور من خواهید شد.
با تشکر



protected override void WndProc(ref System.Windows.Forms.Message m)

iranigirl1364
پنج شنبه 29 آذر 1386, 09:49 صبح
از تمامی شما دوستان به خاطر راهنما ییهای مفیدتون تشکر می کنم.