Wie zeichnet man eine einzelne Zeile mit MouseMove-Ereignis
Ich versuche, zeichnen Sie eine einzelne Zeile mit OnMouseMove()
Veranstaltung. Mein Problem ist, dass jedesmal, wenn ich die Maus bewegen, Es hinterlässt eine Spur. Ich habe versucht, verwenden Sie die refresh-Methode, aber wenn ich die Maus nicht mehr bewegen, die Linie ist Weg. Ich will nicht, dass die Linie gezeichnet werden OnPaint();
will einfach Nur, um es zu zeichnen OnMouseMove()
.
EDIT: ich bin mit einem transparenten panel(cp.ExStyle |= 0x20;), so kann ich nicht verwenden, die graphics.Clear()
und BackColor()
Hier ein Beispiel-Bild, ohne die Refresh()
:
Hier ist mein code:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
using (var p = new Pen(Color.Black, 3))
{
p.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
g.DrawLine(p, st, e.Location);
}
Thread.Sleep(30);
Invalidate();
//this.Refresh();
g.Dispose();
}
Hinsichtlich
Sie können nicht diese Arbeit machen. Fix: social.msdn.microsoft.com/forums/en-US/winforms/thread/...
InformationsquelleAutor Rye | 2010-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende Werke für mich. Im Grunde verfolgen Sie die Letzte Linie gezeichnet wird, und ziehen über Sie mit der Hintergrundfarbe des Fensters (gibt die Wirkung von clearing es).
Wenn Sie panel ist die Hintergrundfarbe auf "Transparent" gesetzt, Sie wird sich ändern müssen
panel1.BackColor
zupanel1.Parent.BackColor
Wenn das Transparente Panel nicht funktioniert, könnten Sie die
DrawReversibleLine
Funktion (obwohl dies nicht erlaubt die Farbe oder die Dicke der Linie verändert werden, es sollten keine Probleme haben, die mit zeichnen/löschen, selbst wenn die panel ist Transparent:Ich sah nur Ihre Kommentare. Sie können
panel1.Parent.BackColor
panel1 ist parent-Formular. Das transparente panel flackert weiß. wenn ich
panel1.Parent.BackColor
Aktualisiert meine Antwort mit einem anderen Ansatz
Oh! ja die drawreversible Linie. Ich habe es vergessen. Warten Sie, ich werde es versuchen.
InformationsquelleAutor SwDevMan81
Anderen einfach Weg und zeichnen Sie eine Linie mit der Maus in C#:
Sie haben zu entsorgen, g und Stift.
InformationsquelleAutor AiviS
Nach
setzen:
Nicht, dass das problem zu beheben?
Ach ja, richtig. Ich dachte, Sie versuchen zu zeichnen wie ein Bleistift. Ich sehe jetzt, dass Sie möchten, um einen Einzel-Startplatz und werden in der Lage, verschieben Sie den Endpunkt um es neu zeichnen nur eine einzige Linie zwischen dem Startpunkt und dem neuen Endpunkt.
Ja @BoltBait das ist richtig.
InformationsquelleAutor BoltBait
Das problem mit der Zeile verschwinden wird, wenn das panel neu gezeichnet, die Linie wird nicht gezeichnet. Was Sie wirklich brauchen, ist die Aktualisierung der end-Punkt der Linie-segment-beim bewegen der Maus über das panel und ungültig das panel. Natürlich, dies bedeutet, dass Sie tun Griff die
Paint
Veranstaltung auf dem panel.Code hier, ohne die event-handler-Registrierung:
Okay. Aber warum kann man nicht behandeln, die
Paint
Veranstaltung? Das ist der einfachste Weg.Ich möchte nur, dass die Linie als eine Markierung.
Können Sie erklären, was das bedeutet?
Ich habe ein transparentes Panel. Es befindet sich oben ein Bild(e.g picturebox), Das Bild enthält Zeichnungen. Ich will einfach nur Messen Sie die Zeichnungen mit Hilfe des drawline auf
MouseMove()
Veranstaltung.InformationsquelleAutor Ani
in der Haupttätigkeit dieser code zu schreiben auch:
InformationsquelleAutor Pir Fahim Shah