Zunächst einmal: TextBoxes
sind alte Legacy und ziemlich spezielle Controls, die nicht alle Dinge unterstützen, die normale Kontrollen Sie tun können.
Unter den Dingen, die nicht
- Einstellen eines Background
- Besitzer Zieh sie
Letzteres schließt jede Zeichnung in seiner Paint/OnPaint
Ereignisse funktionieren.
Sie können Code und Aufschaltung der Paint
Ereignis, aber es wird nicht aufgerufen.
Sie noch können auf eine TextBox
zeichnen CreateGraphics
verwenden, wenn Sie es richtig machen, aber wie immer mit dieser Funktion das Ergebnis nicht-persistent und wird, sobald das System aktualisiert sich die TextBox
weggehen, Das ist super-schnell: sobald Sie den Cursor über den Kreis bewegen Sie verschwinden ziehen kann ..
Der Code zu tun, würde es ähnlich wie folgt aussehen müssen:
Graphics g = yourTextBox.CreateGraphics();
g.FillEllipse(Brushes.Red, yourTextBox.Width - 22, 2, 11, 11);
Aber Wie ich schon sagte, wird das nicht weiter bestehen, also hat es wenig oder keinen Wert.
Wenn Sie auf etwas mit einer sichtbaren Text
Eigenschaft ziehen möchten, können Sie ein Label
verwenden:
private void yourLabel_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillEllipse(Brushes.Red, yourLabel.Width - 22, 2, 11, 11);
}
Das Ergebnis gleich aussieht, aber nur der Punkt in den Label
wird persistent, z a Minimize-Maximize des Formulars .. In der Tat überlebte der Punkt in der TextBox
nicht einmal den Aufruf meiner Screenshot-Programm, so hatte ich verwenden, drücken Sie die Print-Key
!
Für drawing circles upon mouseclicks onto normal controls see this post!
__NEVER__ Verwenden Sie 'Graphics g = CreateGraphics();' Fügen Sie stattdessen den Punkt zu einer Liste hinzu und schreiben Sie das Paint-Ereignis, um Ellipsen an allen diesen Punkten mit seinem e.Graphics-Ereignis zu zeichnen. Nachdem Sie dem Listenaufruf einen Punkt hinzugefügt haben, rufen Sie das Steuerelement auf, für das Sie zeichnen möchten.Außerdem: 'TextBoxes' sind nicht wirklich glücklich, wenn Sie auf ihnen zeichnen möchten; Sie können sehen, dass von der Tatsache, dass sie nicht einmal ein Paint-Ereignis haben !! __ Besser verwenden Sie ein Panel oder wenn Sie Text darauf sowie ein Label wollen. (Btw: Etiketten werden stark unterschätzt) –
TaW
Kannst du näher erläutern, wie das Paint-Event aufgerufen wird? Ich muss dies jedes Mal aufrufen, wenn der Benutzer auf das Panel doppelklickt. –
Wenn Sie ein Panel (oder Label) verwenden möchten, doppelklicken Sie einfach auf das Paint-Ereignis im Eigenschaftsfenster-Events-Panel des Panels! Für [Ereignisse verbinden] (http://stackoverflow.com/questions/33275763/copy-datagridview-values-to-textbox/33276161?s=2|0.3896#33276161) lesen Sie dies. Zum Zeichnen von Ellipsenlisten [siehe diesen Beitrag] (http://stackoverflow.com/questions/36924016/how-to-draw-multiple-ellipse-in-the-same-panel/36924235#36924235) - Noch eine Bemerkung: Die 'Graphics g = CreateGraphics();' erstellt ein Graphics-Objekt, das Sie nur zum Zeichnen von __nicht persistenten Grafiken__ auf das __Form__ verwenden können. – TaW