Hallo alle,
ich hatte dasselbe Problem für die Darstellung von Zeitangaben für einen
digitalen Wecker (Stunden, Minuten und Sekunden) und fand die
einstelligen Werte ohne führende Null auch nicht schön.
Meine Lösung liegt darin, die (verborgene) und von der Basisklasse
UpDownBase geerbte Eigenschaft Text zu überschreiben. Diese Eigenschaft
legt fest, wie Strings im Control dargestellt werden.
class ErweitertesNumericUpDown : NumericUpDown
{ // fügt Werten unter 10 eine führende 0 hinzu
public override string Text
{
get
{
return base.Text; // keine Änderung
}
set
{
if (Convert.ToInt32(value) < 10)
value = "0" + value;
base.Text = value;
}
}
}
Wie bekomme ich das jetzt auf das Formular?
Hier ist eine Anleitung, wie man dabei vorgehen kann (Visual Studio):
1. Die oben aufgeführte Klasse deklarieren im selben Namensraum, in dem
auch das Formular ist)
namespace xxx
{
public partial class Form1 : Form { ...}
class ErweitertesNumericUpDown : NumericUpDown {...}
}
2. Jetzt kann man das Objekt entweder ganz „händisch“ in der Datei
Form1.Designer.cs deklarieren und alle Einstellungen programmieren
(aufwändig und fehleranfällig) oder - was viel besser funktioniert:
a) Ein „normales“ numericUpDown aus der Werkzeugleiste auf das Formular
ziehen (habe ich bei mir zu numericStunde umbenannt)
b) In der Datei Form1.Designer.cs zwei Änderungen manuell durchführen,
dabei wird der vom Visual Studio erzeugte Code auskommentiert und durch
die jeweils folgende Zeile ersetzt:
//private System.Windows.Forms.NumericUpDown numericStunde;
private ErweitertesNumericUpDown numericStunde;
(der folgende Code befindet sich in der Methode InitializeComponent( )
in einem Bereich, den man nicht manuell ändern soll, aber Ausnahmen
bestätigen die Regel)
private void InitializeComponent()
{
...
//this.numericStunde = new
System.Windows.Forms.NumericUpDown();
this.numericStunde = new ErweitertesNumericUpDown();
...
Das sollte es gewesen sein.
Vielleicht hilft es ja jemandem.
Man könnte daraus natürlich auch ein eigenes Benutzersteuerelement
basteln (UserContol).
Abgesehen von den führenden Nullen verhält sich das wie ein
herkömmliches NumericUpDown-Steuerelement.
Sollte wider erwarten jemand ein Problem damit feststellen, bitte hier
posten!
Ich konnte bisher keines finden.
Grüsse
kob