mikrocontroller.net

Forum: PC-Programmierung NumericUpDown C#


Autor: ICh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ICh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ bastelst du dir das NumericUpDown mit zwei buttons und ner 
Textbox selber.

Autor: Tom (Gast)
Datum:

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

Autor: Konrad Berkmann (kob)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: fz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Konrad Berkmann (kob)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@fz

Danke für den Hinweis.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.