2016-07-19 11 views
1

Ich möchte einige grafische Rendering basierend auf der Position des Formulars aktualisieren, wie ich das Formular mit der Maus ziehen. Da das Formular randlos ist, verwende ich ReleaseCapture und , um es zu verschieben.WinForm Update beim Ziehen mit ReleaseCapture

Allerdings kann ich meine Anrufe nicht während des Ziehens ausführen. Ich denke, es ist möglich, einen Thread zu spawnen, der läuft, bis SendMessage einen Wert zurückgibt, jedoch wollte ich fragen, ob es eine native Methode für dieses spezielle Problem gibt?

public void MoveWindow() 
{ 
    ReleaseCapture(); 
    SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
    .... 
} 

Mit freundlichen Grüßen

+0

Sie tun es falsch. Wir können nicht sehen, dass du es falsch machst. Kann nicht einmal sagen, was "nicht in der Lage meine Anrufe zu tun" bedeuten könnte. –

+0

@HansPassant Bitte lesen Sie den bearbeiteten Beitrag –

+0

@HansPassant "nicht in der Lage, meine Anrufe zu tun" bedeutet, dass ich andere Methodenaufrufe während der Ziehen-Operation machen möchte. –

Antwort

0

Sie Ereignisse Formular verwenden können, die beim Start erhöhen, während und am Ende der Bewegung:

  • Verwendung Move Fall Form etwas während Form Bewegung zu tun .

  • Verwenden Sie ResizeBegin Ereignis des Formulars, um einen Job bei Beginn der Bewegung zu tun.

  • Verwenden Sie das Ereignis ResizeEnd, um am Ende der Bewegung eine Aufgabe auszuführen.

Beispiel

private void Form1_Move(object sender, EventArgs e) 
{ 
    this.BackColor = this.Left/10 % 2 == 0 ? Color.Red : Color.Blue; 
} 
private void Form1_ResizeBegin(object sender, EventArgs e) 
{ 
    this.Text = this.Location.ToString(); 
} 
private void Form1_ResizeEnd(object sender, EventArgs e) 
{ 
    this.Text = this.Location.ToString(); 
} 
Verwandte Themen