Die akzeptierte Antwort ist ein cooler Trick, aber es funktioniert nicht immer, wenn das Formular von einem Fill-dockt Kind Steuerung wie ein Panel (oder Derivaten) zum Beispiel bedeckt ist, da diese Kontrolle alle essen die meisten Windows-Nachrichten.
ist hier eine einfache Ansatz, der auch in diesem Fall funktioniert: die Kontrolle in Frage ableiten (diese Klasse verwenden, anstatt der Standard) ein Griff Maus-Nachrichten wie folgt aus:
private class MyTableLayoutPanel : Panel // or TableLayoutPanel, etc.
{
private Point _mouseDown;
private Point _formLocation;
private bool _capture;
// NOTE: we cannot use the WM_NCHITTEST/HTCAPTION trick because the table is in control, not the owning form...
protected override void OnMouseDown(MouseEventArgs e)
{
_capture = true;
_mouseDown = e.Location;
_formLocation = ((Form)TopLevelControl).Location;
}
protected override void OnMouseUp(MouseEventArgs e)
{
_capture = false;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (_capture)
{
int dx = e.Location.X - _mouseDown.X;
int dy = e.Location.Y - _mouseDown.Y;
Point newLocation = new Point(_formLocation.X + dx, _formLocation.Y + dy);
((Form)TopLevelControl).Location = newLocation;
_formLocation = newLocation;
}
}
}
Dies macht Kontextmenü nicht verfügbar. –
Das funktioniert, aber wenn der Begrüßungsbildschirm über Steuerelemente verfügt (z. B. eine Beschriftung), wird durch Klicken auf das Label nicht bewegt. Wie man das speziell verwaltet, wenn der Splash mehrere Steuerelemente hat? – supafly