Ich habe dieses System.Windows.Forms.Panel, das ich aktivieren möchte, so dass, wenn der Benutzer klicken und zieht die Maus zieht das Fenster um zu.
Kann ich das tun? Muss ich mehrere Ereignisse implementieren?
Ich habe dieses System.Windows.Forms.Panel, das ich aktivieren möchte, so dass, wenn der Benutzer klicken und zieht die Maus zieht das Fenster um zu.
Kann ich das tun? Muss ich mehrere Ereignisse implementieren?
Die Lösung, die für mich am besten funktioniert, ist die Verwendung von nicht verwaltetem Code, der im Gegensatz zu der von HatSoft veröffentlichten Antwort glatte Fensterbewegungen ermöglicht.
3 kleine Schritte, um Ihr Fenster auf Panel-Bewegung zu ziehen
using System.Runtime.InteropServices;
Fügen Sie diese sechs Zeilen in Ihre Klasse ein
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();
und Ihr MouseMove-Ereignis auf Panel sollte wie folgt aussehen
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
ein bisschen spät gepostet :) aber wer weiß, vielleicht brauchen wir es in Zukunft wieder.
Sie können dies erreichen, indem Sie das MouseMove-Ereignis des Panels verwenden
Das Beispiel sollte in etwa so aussehen (ich habe es leider nicht getestet)
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(Cursor.Position.X + e.X , Cursor.Position.Y + e.Y);
}
}
Derzeit für ein Panel vorgesehen. VS C# Just Messing About Scheint für mich zu arbeiten, wie ich wollte Setzt die linke obere Ecke der Anwendung auf die Mausposition, während die linke Maustaste gedrückt wird.
public form1()
{
InitializeComponent();
this.panel2.MouseMove += new MouseEventHandler(panel2_MouseMove);
}
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);
private void panel2_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point loc1 = MousePosition;
this.Location = loc1;
}
}
Hey, ich hoffe, das funktioniert für dich
Zuerst müssen Sie eine panel
auf Ihr Formular und docken Sie es oben an
Fügen Sie dann die folgenden Codezeilen hinzu
using System.Runtime.InteropServices;
public partial class Main_FM : Form {
[DllImport("user32.dll", EntryPoint = "ReleaseCapture")] private extern static void ReleaseCapture();
[DllImport("user32.dll", EntryPoint = "SendMessage")] private extern static void SendMessge(System.IntPtr hwnd, int wmsg, int wparam, int lparam);
}
Die erstellen die MouseDown
Ereignis auf der panel
und fügen Sie diese Codes hinzu:
private void Top_PNL_MouseDown(object sender, MouseEventArgs e) { ReleaseCapture(); SendMessge(this.Handle, 0x112, 0xf012, 0); }
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.