PDA

View Full Version : مبتدی: ایجاد یک فرم که نتوان مکان آن را تغییر داد



Altech
یک شنبه 15 اسفند 1389, 20:27 عصر
می شه یه کاری کرد که نشه مکان فرم رو تغییر داد ؟
یعنی نشه Drag اش کرد . ثابت همون وسط بمونه .

unknown.unforgiven
یک شنبه 15 اسفند 1389, 21:23 عصر
سلام
من 2 تا راه واسه این کار میدونم:
1. formborderstyle رو برابر none قرار بده. با این کار کادر فرم حذف میشه
2. اگه بخوای کادر فرم رو داشته باشی و نشه فرم رو جا به جا کرد باید تو رویداد locationchanged فرم، مکان فرمت رو مقدار اولیه که داشته قرار بدی
اگه متوجه نشدی بگو تا بیشتر توضیح بدم

payman_xxp
یک شنبه 15 اسفند 1389, 23:17 عصر
سلام
به دو روش دوستمون ،روش سوم که حرفه ای ترهستش هم اضافه میکنم .

1. formborderstyle رو برابر none قرار بده. با این کار کادر فرم حذف میشه، دیگه form border نداری .

در روش 2 و 3 در هر دو form border داری( ست کردن StartPosition فرم به CenterScreen لازمه تا فرم در وسط صفحه دیده بشه):

2. در این روش فرم درگ میشه ولی به محض رها کردن فرم ، فرم به مکان اولیه برمیگرده:
public partial class Form1 : Form
{
private Point startLocation;

public Form1()
{
InitializeComponent();
this.startLocation = this.Location;
}

private void Form1_Move(object sender, EventArgs e)
{
this.Location = this.startLocation;
}
}

3. روش حرفه ای تر، که با override کردن متد WndProc (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc.aspx)قابل انجامه:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

protected override void WndProc(ref Message m)
{
const int WM_NCLBUTTONDOWN = 161;
const int WM_SYSCOMMAND = 274;
const int HTCAPTION = 2;
const int SC_MOVE = 61456;

if ((m.Msg == WM_SYSCOMMAND) && (m.WParam.ToInt32() == SC_MOVE))
{
return;
}

if ((m.Msg == WM_NCLBUTTONDOWN) && (m.WParam.ToInt32() == HTCAPTION))
{
return;
}

base.WndProc(ref m);
}
}
موفق باشید.

melika999
دوشنبه 16 اسفند 1389, 00:08 صبح
يه عكس backgroundesh بذار و formborderstyle:none بذار:لبخندساده:

Altech
دوشنبه 16 اسفند 1389, 00:22 صبح
ممنون .
روش سوم بهتر بود .
روش دوم رو هم قبلا انواع مختلفشو امتحان کرده بودم جواب نداده بود . الانم جواب نداد .
کار متد WndProc چی هست ؟

payman_xxp
دوشنبه 16 اسفند 1389, 08:08 صبح
ممنون .
روش سوم بهتر بود .
روش دوم رو هم قبلا انواع مختلفشو امتحان کرده بودم جواب نداده بود . الانم جواب نداد .
کار متد WndProc چی هست ؟
سلام
در تاپیک قبلی روی کلمه مورد نظر کلیک کنید، به MSDN هدایت میشوید.

کاش میگفتید روش2 رو چطور پیاده کردید که جواب نگرفتید.
موفق باشید.