Entwickler-Ecke
WinForms - TextBox Rahmenfarbe ändern
yndaso - Mi 03.03.10 11:14
Titel: TextBox Rahmenfarbe ändern
Hallo zusammen,
ich versuche gerade die Textbox ein bisschen zu modifizieren.
Unter anderem möchte ich die Rahmenfarbe ändern. Also hab schon ein
bisschen geschaut, im www gibt es ja schon einige die das gleiche anliegen haben.
Ich weiß auf jeden Fall nun, dass man sich ein eigenes Objekt macht und dies von TextBox ableiten soll. Im onPaint bereich kann man anschließend ein Rechteckt aussen herum "malen".
Hab nun mal angefangen das neue Objekt zu erstellen. Und dies auch schonmal in mein WinForm eingebunden.
Mir fällt aber nun auf das das OnPain Event nicht kommt...
Kann mir jemand sagen was ich hier noch falsch mache:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms;
namespace IW_DataMatrix { class TextArea : TextBox { private Color m_Color; private float m_BorderWidth;
public Color BorderColor { get { return m_Color;} set { m_Color = value;} }
public float BorderWidth { get { return m_BorderWidth;} set { m_BorderWidth = value;} } public TextArea() { base.BorderStyle = BorderStyle.None; this.Paint += new PaintEventHandler(TextArea_Paint); } void TextArea_Paint(object sender, PaintEventArgs e) { throw new Exception("The method or operation is not implemented."); }
} } |
Vorab Danke!
danielf - Mi 03.03.10 12:28
Hallo,
du musst nicht das Paint Event registrieren, sondern die OnPaint-Methode überschreiben.
Gruß Daniel
yndaso - Mi 03.03.10 12:35
danielf hat folgendes geschrieben : |
Hallo,
du musst nicht das Paint Event registrieren, sondern die OnPaint-Methode überschreiben.
Gruß Daniel |
Danke
habe das nu abgeändert und das Event rausgeschmissen, stattdessen habe ich mal folgendes
eingefügt und ein Breakpoint mal dahin gesetzt.
C#-Quelltext
1: 2: 3: 4:
| protected override void OnPaint(PaintEventArgs e) {
} |
Dieser Teil wird auch nicht bearbeitet.
In meinem Hauptform habe ich die onPaint Methode auch drin:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| this.Paint += new System.Windows.Forms.PaintEventHandler(this.IW_DataMatrix_Paint); ....
private void IW_DataMatrix_Paint(object sender, PaintEventArgs e) { ... } |
Ralf Jansen - Mi 03.03.10 13:00
Painting ist für Textboxen eigentlich abgeschaltet. Du kannst es aber über die SetStyle Methode wieder einschalten(siehe Code).
Das das ausgeschaltet ist hat aber seinen Grund. Das zeichnen übernimmt eigentlich komplett das CommonControl unter der Winforms Hülle. Das ändern des Verhalten ist also nicht so einfach möglich.
Wie im Code gezeigt kannst du zwar auf dem Control zeichnen das grundsätzliche ~Paintverhalten~ des CommonControls zu ändern müsstest du wahrscheinlich tiefer eingreifen. Vermutlich die WndProc überschreiben WM_Paint fangen und dort dem darunterliegenden CommonControl die passenden WindowMessages senden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public class TextArea : TextBox { public TextArea () { SetStyle(ControlStyles.UserPaint, true); }
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Rectangle rect = e.ClipRectangle; rect.Width -= 1; rect.Height -= 1; e.Graphics.DrawRectangle(new Pen(Color.Red), rect); } } |
yndaso - Mi 03.03.10 13:07
Hey danke!
Das war ein super Tip, funktionert...
Ähm hat das ändern des SetStyle Auswirkungen auf das Form?
Sollte man vielleicht das SetSytle am Ende wieder auf "false" setzen?
Ralf Jansen - Mi 03.03.10 13:13
SetStyle bezieht sich nur auf Styles des Controls selbst hat also keinen Einfluss auf den Rest der Form. Zurücksetzen oder jede andere Änderungen an den Styles beim Dispose des Controls hat also keine Auswirkung.
yndaso - Mi 03.03.10 14:01
alles klar.
Vielen Dank nochmals...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!