Forum: PC-Programmierung NumericUpDown C#


von ICh (Gast)


Lesenswert?

Hallo alle miteinander,

ich hab eine Frage zu dem Steuerelement NumericUpDown in C#.
Ich will mit dem Steuerelement Zahlen von 0 bis 23 darstellen (inkrement 
==1).
Wenn ich die Zahl darstelle ist es möglich das in diesem
Format zu machen :
                   01
                   02
                   03
                   .
                   .
                   .
                   22
                   23

allso bei allen einstelligen Zahlen mit einer führenden Null. Es
klappt nach bisherigen versuchen nur ohnen führende Null.

von Tom (Gast)


Lesenswert?

Interessantes Problem.

Ich habe mal ein wenig rumprobiert. Das numericUpDown unterdrückt beim 
Überschreiben der Eigenschaft -Text- nullen am Anfang. Enthält Text 
Buchstaben oder Sonderzeichen wird alles ignoriert. Es gibt auch keine 
Eigenschaft mit der man einstellen kann ob eine Null am Anfang gezeigt 
wird oder nicht.

Vielleicht läßt sich aus der BasisKlasse UpDownBase ein eigenes 
numericUpDown basteln. :)

Was mir noch eingefallen ist:
Die Breite des numericUpDown bis auf "UpDown" verkleinern und eine 
TextBox
direkt daneben setzen und die TextBox je nach Änderung des "UpDown ohne 
numeric" per Hand beschreiben.

Viel Spaß,
Tom

von ICh (Gast)


Lesenswert?

Was glaube ich auch gehen müsste anstatt der NumericUpDown eine 
DomainUpDown zu verwende. Einfach die Zahl 1 in einen String umwandeln
und eine zusätzlich 0 in den String kopieren ->und dann reindamit ins 
NumericUPDown

von Sven (Gast)


Lesenswert?

Alternativ bastelst du dir das NumericUpDown mit zwei buttons und ner 
Textbox selber.

von Tom (Gast)


Lesenswert?

Gute Idee mit dem domainUpDown.
Da kannst Du ja Deine Zahlen als Items eintragen.
Kannst Du das domainUpDown mit Items->SelectedIndex abfragen?

von Konrad B. (kob)


Lesenswert?

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

von fz (Gast)


Lesenswert?

Um eine Komponente einfacher auf die Form zu bringen genügt es die 
Komponente zu erstellen anschließend das Programm kompilieren und schon 
befindet sich die selbst erstellte Komponente in der Toolbox.

von Konrad B. (kob)


Lesenswert?

@fz

Danke für den Hinweis.

von Ich (Gast)


Lesenswert?

Ich wollte mit den NumericUpDown auch die Uhrzeit darstellen.
Habe dann aber rausgefunden das es den "DateTimePicker" gibt der hat das
Problem gelöst

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.