Hallo,
da ich an meinem Projekt das Layout ändern möchte, würde ich dazu gerne eine einfache Methode schreiben, die ich dann pro Form aufrufen kann.
public static void StyleReadOnlyTextBox(Form f)
{
foreach (var control in f.Controls)
{
TextBox textBoxReadOnly = control as TextBox;
if (textBoxReadOnly.ReadOnly)
{
textBoxReadOnly.BackColor = Color.AliceBlue;
}
}
}
Beim Aufruf erhalte ich allerdings eine NullReferenceException. Weshalb??
Weeks of programming can save you hours of planning
Hallo tristar,
um MrSparkle's Antwort ein wenig verständlicher darzustellen:
Nicht jedes Control auf einem Form / UserControl muss eine TextBox sein. Dein Code geht aber gänzlich davon aus.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
... ja aber der hier passende type-pattern wird ja in dem (alten) Beitrag nicht erklärt, vllt sollte das mal angepasst werden.
Der Type Pattern ist nur Syntaxzucker.
Ändert nichts an der Funktionweise von is
- und das ist im Beitrag abgedeckt.
Gerne kannst Du aber eine sachliche Erweiterung in der FAQ hinzufügen 😃
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Gerne kannst Du aber eine sachliche Erweiterung in der FAQ hinzufügen 😃
Wie kann man denn dort eine Antwort verfassen? Wollte den Eintrag ergänzen, habe aber keine Rechte...
Oh...
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hab es nun wie folgt gelöst
public static void StyleStatusStrip(Form f)
{
foreach (var control in f.Controls)
{
if (control is StatusStrip)
{
StatusStrip sStrip = control as StatusStrip;
sStrip.BackColor = Color.WhiteSmoke;
}
}
}
Führe ich solgenden Code allerdings beim Aufruf einer Form im Konstruktor aus, so wird der StatusStrip farblich nicht angepasst.
Beim Debuggen scheint es so, als ob der Strip nicht als Control der Form erkannt wird. Zumindest enthält die ControlCollection nicht den StatusStrip. Weshalb?
Du solltest nicht zweimal casten (einmal is
, und dann noch as
):
public static void StyleStatusStrip(Form f)
{
foreach (var control in f.Controls)
{
StatusStrip sStrip = control as StatusStrip;
if (sStrip != null)
sStrip.BackColor = Color.WhiteSmoke;
}
}
oder noch kürzer:
StatusStrip sStrip = control as StatusStrip;
sStrip?.BackColor = Color.WhiteSmoke;
Hast du den Code (bzw. den Aufruf) vor InitializeComponent()
eingefügt?
Der Code muß zwingend danach, da in dieser Methode ja erst die Unterelemente erzeugt werden.
Evtl. liegt ja der StatusStrip auch in einem anderen Control (Panel?), aber wir kennen den Aufbau deiner Forms ja nicht.
Weeks of programming can save you hours of planning
Du solltest nicht zweimal casten (einmal is, und dann noch as):
Danke für den Hinweis
Evtl. liegt ja der StatusStrip auch in einem anderen Control (Panel?), aber wir kennen den Aufbau deiner Forms ja nicht.
Danke für den Tipp, genau das war das Problem!