Form mit Maus verschieben

Meldur

Erfahrenes Mitglied
Hallo!

Ich möchte eine Form durch anklicken einer Control verschieben können - sozusagen eine Art Titelleiste - nur selbst definiert. Habe es schon über das MouseMove-Event versucht, aber dann flackert die Form nur ganz furchtbar. Weiß jemand Rat?

Danke,
Peter
 
Tach !
Damit hatte ich auch schon zu tun.
Aber das ist, so scheint mir, eine Schwachstelle in der Oberfläche von .Net. Wenn man diese Forms verschiebt flackern sie eben. Selbst wenn man sie Pixelweise schiebt.
Man kann das mit einem DoubleBuffer verbessern, doch das habe ich nie so richtig hingebracht. Bin dann irgendwann bei OpenGL und DirectX hängen geblieben. Da geht das einfacher.

Wie wäre es, wenn du die Form einfach lässt wo sie ist und erst wenn die Maus losgelassen wird, dahin schiebst, wo die Maus jetzt ist. Das gab bei Windows damals auch (weiß nicht ob das noch so ist). Man kann das Fenster anhand eines Positionsrahmens verschieben und erst wenn man die Maus loslässt findet die Verschiebung statt. Damit sparst du dir einiges Geflacker.
Is nur so ein Ansatz.

MFG JJB
 
Danke für die Links! Ich werde versuchen dsa VB-Beispiel auf C# zu adaptieren (sollte ja möglich sein). Da bin ich mal gespannt...
 
C#:
using System.Runtime.InteropServices;

public class Blabla
{
    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HTCAPTION = 0x2;
    [DllImport("User32.dll")]
    public static extern bool ReleaseCapture();
    [DllImport("User32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 


  private void MoveForm()
  {
    ReleaseCapture();
    SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); 
  }
}

Mit ein wenig Interop geht das auch ganz flink...

Mit dem Code ists so als würd man auf die Titelleiste klicken. ;)
 
Zurück