#C
---
דרך אחרת לגרירה של טופס - הכוללת אפשרות לגרירה של הטופס עד לחל העליון של המסך כדי להגדיל אותו -
יש ליישם את האירועים הבאים על קונטרול כלשהו (ולא על הטופס עצמו) - למשל Panel:
בכל מקום שעל הטופס או על כל פקד (Control) אחר, נעשה ע"י מיקום של השורות האלה בראש הטופס:
// Drag the Form
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
ולאחר מכן יש ליצור אירוע MouseDown עבור הטופס או עבור ה-Control איתו אנו עובדים,
ולמקם את הקוד הבא בשיטה של האירוע:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
---
דרך אחרת לגרירה של טופס - הכוללת אפשרות לגרירה של הטופס עד לחל העליון של המסך כדי להגדיל אותו -
יש ליישם את האירועים הבאים על קונטרול כלשהו (ולא על הטופס עצמו) - למשל Panel:
;private bool _mouseDown = false;
private Point _firstPoint;
private void panel1_MouseEnter(object sender, EventArgs e)
{
Cursor = Cursors.Hand;
}
privatevoid panel1_MouseLeave(object sender, EventArgs e)
{
Cursor = Cursors.Default;
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
_firstPoint = e.Location;
_mouseDown = true;
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
_mouseDown = false;
if (Cursor.Position.Y == 0)
{
this.WindowState = FormWindowState.Maximized;
}
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (_mouseDown)
{
// Get the difference between the two points
int xDiff = _firstPoint.X - e.Location.X;
int yDiff = _firstPoint.Y - e.Location.Y;
// Set the new point
int x = this.Location.X - xDiff;
int y = this.Location.Y - yDiff;
this.Location = new Point(x, y);
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
}
}
אין תגובות:
הוסף רשומת תגובה