2011-01-22 31 views

Respuesta

23

Esto debe ser lo que busca "Enhanced: Drag and move WinForms"

public partial class MyDraggableForm : Form 
{ 
    private const int WM_NCHITTEST = 0x84; 
    private const int HTCLIENT = 0x1; 
    private const int HTCAPTION = 0x2; 

    /// 
    /// Handling the window messages 
    /// 
    protected override void WndProc(ref Message message) 
    { 
     base.WndProc(ref message); 

     if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT) 
      message.Result = (IntPtr)HTCAPTION; 
    } 
    public MyDraggableForm() 
    { 
     InitializeComponent(); 
    } 
} 

Como los estados de entradas de blog, esta es una manera de "engañar" al sistema. De esta forma, no es necesario que piense en eventos de mouse arriba/abajo.

+3

Tenga en cuenta que, como efecto secundario, la ventana maximizará la ventana al hacer doble clic. [Esta respuesta] (http://stackoverflow.com/a/1592899/855432) no causa este problema. – ghord

+0

¿Puedo hacerlo arrastrable solo en cierta porción? por ejemplo, dentro de una región de control – Thunder

+0

También mata el botón derecho del mouse. – TaW

2

Debe registrarse para los eventos MouseDown, MouseUp y MouseMove y mover el formulario de acuerdo con el movimiento del mouse.

+0

Esta respuesta sería más valiosa con un ejemplo de código. La matemática para mover el formulario basado en las coordenadas del mouse no es trivial. – servermanfail

Cuestiones relacionadas