I have this System.Windows.Forms.Panel that I want to enable so that if the user click and drags the mouse drags the window around to.
Can I do this? Do i have to implement multiple events?
The Solution that works best for me is using unmanaged code, which gives you smooth window movements unlike the answer posted by HatSoft.
3 small steps to drag your window on Panel movement
using System.Runtime.InteropServices;
add these six lines inside your class
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();
and your MouseMove event on Panel should look like this
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
posted it a little late :) , who knows we might need it again in future.
You can achieve it by using the MouseMove Event of the panel
Example should be something like this (Sorry have not tested it)
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);
}
}
You might want to take a look at this component that I pasted here:
It is a component that you will be able to drop on a form, and then drag the form by dragging inside it.
Currently Set For A Panel. VS C# Just Messing About Seems to work for me as I wanted Sets application left-top corner to mouse position while left-click is pressed.
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 Hope this works for you
panel
on your form and dock it to top
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);
}
MouseDown
event on the panel
and add these codes: private void Top_PNL_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessge(this.Handle, 0x112, 0xf012, 0);
}
Bravo 的代码工作得非常好,但是直到我在我想要移动的面板的->properties->event 部分中明确启用 MouseMove 事件之前,我无法让它工作。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.