2011-01-22 23 views

risposta

23

Questo dovrebbe essere quello che stai cercando "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(); 
    } 
} 

Come afferma il post del blog, questo è un modo per "ingannare" il sistema. In questo modo non è necessario pensare a eventi mouse su/giù.

+3

Ricorda che come effetto collaterale la finestra ingrandirà al doppio clic. [Questa risposta] (http://stackoverflow.com/a/1592899/855432) non causa questo problema. – ghord

+0

Posso renderlo trascinabile solo su alcune porzioni? ad es. con un'area di controllo – Thunder

+0

Elimina anche il pulsante destro del mouse. – TaW

2

È necessario registrarsi per gli eventi MouseDown, MouseUp e MouseMove e spostare il modulo in base al movimento del mouse.

+0

Questa risposta sarebbe più utile con un esempio di codice. La matematica per spostare il modulo in base alle coordinate del mouse non è banale. – servermanfail

Problemi correlati