Discussion:
Schriftfarbe ändern trotz enable=false
(zu alt für eine Antwort)
Norbert Lutz
2009-07-26 19:50:34 UTC
Permalink
Hallo,

wie kann ich die Schriftfarbe ändern auch wenn das Textfeld disabled ist?

Norbert
Karsten Sosna
2009-07-27 06:26:17 UTC
Permalink
Post by Norbert Lutz
wie kann ich die Schriftfarbe ändern auch wenn das Textfeld disabled ist?
Hallo Norbert,
AFAIK gar nicht, da dieses Control vom BS gezeichnet wird. Übrigens teile
ich hier 100%ig die Meinung von Peter:

"Dabei solltest Du bedenken, dass es viele Anwender gibt, die eine
Farbsehschwäche haben und deshalb darauf angewiesen sind, entsprechende
Farben selbst einstellen zu können."

Jeder Versuch hier an den Farben "rumzudrehen" sollte schon unter Strafe
gestellt werden. ;=)

Wenn Du etwas machen willst, damit das aktuelle Eingabefeld besser
hervorgehoben wird, dann zeiche einen Rahmen um das Feld. Hier aber bitte
die Systemfarben benutzen, bspw. ControlDark, ControlDarkDark, HotTrack oder
HighLight. Letztere wäre wohl die am zutreffendeste. Auch ein FocusRectangle
wäre möglich(siehe ControlPaint-Klasse.

\\\
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox Then
AddHandler ctl.Enter, AddressOf Control_Enter
End If
Next
End Sub

Private Sub Control_Enter(ByVal sender As Object, ByVal e As
System.EventArgs)
Me.Invalidate(True)
End Sub

Protected Overrides Sub OnPaint(ByVal e As
System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
If TypeOf Me.ActiveControl Is TextBox Then
Dim rect As New Rectangle(Me.ActiveControl.Location,
Me.ActiveControl.Size)
rect.Inflate(2, 2)
Using SBR As New SolidBrush(SystemColors.Highlight)
e.Graphics.FillRectangle(SBR, rect)
End Using
End If
End Sub
///
--
Gruß Scotty
Peter Götz
2009-07-27 06:47:32 UTC
Permalink
Hallo Norbert,
Post by Norbert Lutz
wie kann ich die Schriftfarbe ändern auch wenn das
Textfeld disabled ist?
Ich denke, Du tust Deinen künftigen Benutzern keinen
besonderen Gefallen, wenn Du von "Windows-Standard"-
Darstellungen abweichst. Otto-Normal-Benutzer weiss,
dass graue Schrift in einer Textbox bedeutet, dass sie
gesperrt (enabled = false) ist. Andere farbliche Darstellungen
würden den Benutzer eher verwirren.

Wenn die Textbox dagegen ohnehin nur "readonly" sein
soll, dann nimm doch besser ein Label-Steuerelement,
dessen Farbe Du dann nach Gutdünken festlegen kannst
und dabei das Risiko eingehst, dass jemand mit einer
Farbsehschwäche ein Problem mit den von Dir gewählten
Farbkontrasten hat.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
Norbert Lutz
2009-07-27 07:10:21 UTC
Permalink
Hallo Peter,

ich werde Labels einsetzen.

DANKE für den Gedankenanschub

Norbert
Peter Götz
2009-07-27 16:07:08 UTC
Permalink
Hallo Norber,
Post by Norbert Lutz
ich werde Labels einsetzen.
DANKE für den Gedankenanschub
Ja, manchmal sieht man den Wald vor lauter
Bäumen nicht mehr. ;-))

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
Martin H.
2009-07-27 19:17:04 UTC
Permalink
Hallo Peter,
Post by Peter Götz
Ich denke, Du tust Deinen künftigen Benutzern keinen
besonderen Gefallen, wenn Du von "Windows-Standard"-
Darstellungen abweichst. Otto-Normal-Benutzer weiss,
dass graue Schrift in einer Textbox bedeutet, dass sie
gesperrt (enabled = false) ist. Andere farbliche Darstellungen
würden den Benutzer eher verwirren.
das hat aber mit den Windows-Einstellungen nichts zu tun.
Unter VB5 kann man für eine TextBox ReadOnly (Locked) einstellen
und sie behält trotzdem ihren weißen Hintergrund. Es dürfte sich
bei dieser Änderung also wahrscheinlich um ein Feature des
Frameworks handeln.

Ich stimme Dir zu, dass die meisten Benutzer bei einer ausgegrauten
Textbox erwarten, dass der enthaltene Text nicht verändert werden kann,
während sie bei einer weißen erwarten würden, dass sie verändert werden
kann. Nur kann es trotzdem Sinn machen, die Farbe frei vergeben zu
können, wenn z.B. die aktive TextBox hellgelb wäre, könnte sie als
deaktivierte TextBox dunkelgelb sein. Dies würde dem Benutzer es
ebenfalls klarmachen, dass sie inaktiv ist. Es wäre m.E. sinnvoll, wenn
die TextBox für den deaktivierten Zustand 2 Zustände hätte: Standard und
Custom. Damit wäre dann jedem gedient...

Falls jemand von Microsoft gerade mitliest: Könntet ihr das bitte in die
nächste Version des .NET-Frameworks implementieren?

Beste Grüße,

Martin
Peter Götz
2009-07-28 06:33:47 UTC
Permalink
Hallo Martin,
Post by Martin H.
Post by Peter Götz
Ich denke, Du tust Deinen künftigen Benutzern keinen
besonderen Gefallen, wenn Du von "Windows-Standard"-
Darstellungen abweichst. Otto-Normal-Benutzer weiss,
dass graue Schrift in einer Textbox bedeutet, dass sie
gesperrt (enabled = false) ist. Andere farbliche Darstellungen
würden den Benutzer eher verwirren.
das hat aber mit den Windows-Einstellungen nichts zu tun.
Unter VB5 kann man für eine TextBox ReadOnly (Locked) einstellen
und sie behält trotzdem ihren weißen Hintergrund. Es dürfte sich
bei dieser Änderung also wahrscheinlich um ein Feature des
Frameworks handeln.
Ich stimme Dir zu, dass die meisten Benutzer bei einer ausgegrauten
Textbox erwarten, dass der enthaltene Text nicht verändert werden kann,
während sie bei einer weißen erwarten würden, dass sie verändert werden
kann. Nur kann es trotzdem Sinn machen, die Farbe frei vergeben zu
können, wenn z.B. die aktive TextBox hellgelb wäre, könnte sie als
deaktivierte TextBox dunkelgelb sein.
Sofern der jeweilige Benutzer diese Farben selbst und individuell
einstellen kann, ist dagegen nichts einzuwenden. Nur sollte man
im Programm nicht unveränderliche Farbkontraste festlegen, da
dies für viele Anwender mit einer Farbsehschwäche ein Problem
darstellen könnte.
Nach Gesprächen mit einem Betriebsarzt eines grossen Industrie-
unternehmens war ich sehr überrascht, wieviele PC-Benutzer es
gibt, die irgendeine Farbsehschwäche haben, denen man als
Entwickler mit irgendwelchen gutgemeinten Farbspielereien, das
Leben eher schwer macht.
Post by Martin H.
Dies würde dem Benutzer es ebenfalls klarmachen, dass sie
inaktiv ist. Es wäre m.E. sinnvoll, wenn die TextBox für den
deaktivierten Zustand 2 Zustände hätte: Standard und
Custom. Damit wäre dann jedem gedient...
Die Textbox bietet zum einen die Eigenschaft

Textbox.Enabled = True/False

wobei im Falle von False die Textbox gesperrt (keine Eingabe
möglich, kein Focus) und windowskonform ausgegraut ist.

Sie bietet ferner die Eigenschaft

Textbox.ReadOnly = True/False

mit der eine Eingabe erlaubt bzw. verhindert werden kann,
wobei die Textbox jedoch in jedem Fall den Focus erhalten
kann und auch Vorder- und Hintergrundfarben beliebig
einstellbar sind.
Post by Martin H.
Falls jemand von Microsoft gerade mitliest: Könntet ihr
das bitte in die nächste Version des .NET-Frameworks
implementieren?
Ist wohl nicht nötig, da schon vorhanden.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
Harald M. Genauck
2009-07-28 08:46:36 UTC
Permalink
Hallo Martin,
Post by Martin H.
Post by Peter Götz
Ich denke, Du tust Deinen künftigen Benutzern keinen
besonderen Gefallen, wenn Du von "Windows-Standard"-
Darstellungen abweichst. Otto-Normal-Benutzer weiss,
dass graue Schrift in einer Textbox bedeutet, dass sie
gesperrt (enabled = false) ist. Andere farbliche Darstellungen
würden den Benutzer eher verwirren.
das hat aber mit den Windows-Einstellungen nichts zu tun.
Unter VB5 kann man für eine TextBox ReadOnly (Locked) einstellen
und sie behält trotzdem ihren weißen Hintergrund. Es dürfte sich
bei dieser Änderung also wahrscheinlich um ein Feature des
Frameworks handeln.
Nein, "Enabled" ist etwas völlig anderes als "Locked" (unter
VB6/5/4...) bzw. "ReadOnly" unter .NET.

"Enabled" ist ein generelles UI-Feature von Windows, das für alle
Steuerelemente und Fenster gilt und im gesperrten Zustand möglichst
standardmäßig ("ausgegraut") visualisiert werden sollte (bei einem
Fenster/Form wird es beispielsweise nicht visualisiert). Bei Enabled =
False ist ein Fenster (Steuerelemente sind ursprünglich und prinzipiell
auch nur Fenster) aus Windows-interner Sicht nicht erreichbar.

"ReadOnly"/"Locked" ist dagegen ein spezifisches Feature der TextBox,
über das lediglich (und unabhjängig von der Enabled-Eigenschaft) die
*Eingabe*-Möglichkeit gesperrt werden kann. Sie kann aber dennoch den
Fokus erhalten (auch ganz normal innerhalb der Tab-Index-Reihenfolge)
und ihr Inhalt kann nach wie vor auch per Tastatur markiert werden wie
auch kopiert werden.
Post by Martin H.
Ich stimme Dir zu, dass die meisten Benutzer bei einer ausgegrauten
Textbox erwarten, dass der enthaltene Text nicht verändert werden
kann, während sie bei einer weißen erwarten würden, dass sie
verändert werden kann.
Bei Enabled = False wird nur der Text ausgegraut, während der
Hintergrund seine beliebig eingestellte Farbe behält - der Text wird ja
nicht weiß ...
;-)

Bei einer lediglich für die Eingabe gesperrten TextBox
(ReadOnly/Locked) wird üblicherweise die Schriftfarbe nicht verändert,
jedoch die Hintergrundfarbe meistens auf die die Textbox umgebende
Hintergrundfarbe gesetzt. Beim klassischen Windows-Stil mit den
(standardmäßig) grauen Oberflächen war diese Art der Kennzeichnung noch
eindeutig, während sie seit XP und Vista (und im Web) mit den oftmals
weißen Standardoberflächen diese Eindeutigkeit leider verloren hat.


Viele Grüße

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)

Loading...