Laden...

DateTimePicker-Eigenschaft gesucht

Erstellt von CB.NET vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.484 Views
CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 18 Jahren
DateTimePicker-Eigenschaft gesucht

hallo,
gibt es beim DateTimepicker eine Eigenschaft, mit der ich angeben kann,
dass nach einer Eingabe per Tastatur der Cursor automatisch in das nächste Feld
vom dtp springt?

etwas passendes hab ich in den Eigenschaften nicht gefunden ! ev. übersehen ?

Beispiel:
Ein Kunde hat am 22.10.1967 Geburtstag

  1. ich gehe in den dtp
  2. Ich trage die 22 ein
  3. danach soll automatisch in das Monatsfeld gesprungen werden
  4. ich trage den Monat ein "10"
  5. danach soll automatisch in das Jahresfeld gesprungen werden

bisher muss ich immer mit dem Cursor weiterspringen

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo CB.NET,

ich glaube du hast nichts übersehen.

Du könntest höchstens probieren auf DateTimePicker.ValueChanged zu reagieren und dann ggf. selbst ins nächste Feld zu springen. Weiß aber nicht, ob man auf dem Weg wirklich ans Ziel kommt.

herbivore

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 18 Jahren

danke dir...
also doch richtig geschaut...

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo CB.NET,

bisher muss ich immer mit dem Cursor weiterspringen

was mir gerade noch einfällt: Er springt auch durch Eingabe von Punkt ins nächste Feld.

Man kann also ganz normal 22.10.1967 hintereinanderweg eingeben.

herbivore

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 18 Jahren

Original von herbivore
was mir gerade noch einfällt: Er springt auch durch Eingabe von Punkt ins nächste Feld.

Man kann also ganz normal 22.10.1967 hintereinanderweg eingeben.

herbivore

klasse,
kannte ich auch noch nicht.
mal fragen, ob das auch meine User so akzeptieren, ansonsten werde ich wohl das ValueChanged anfassen müssen.

D
33 Beiträge seit 2005
vor 18 Jahren

Mit den Pfeiltasten oder sogar mit Komma geht es ebenfalls... Das sollten bestimmt genug möglichkeiten sein, im fluss ein datum eingeben zu können... 👍

Wenn man was braucht ist es nicht da, ansonsten liegts im Weg rum...

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 18 Jahren

Original von Dosihris
Mit den Pfeiltasten oder sogar mit Komma geht es ebenfalls... Das sollten bestimmt genug möglichkeiten sein, im fluss ein datum eingeben zu können... 👍

mit den Pfeiltasten ist aber ziemlich dumm, besonders wenn es schnell gehen soll.
da ziehe ich lieber die Variante mit dem Punkt vor.

wie schon gesagt, ich hätte es lieber gehabt, das ich das datum in einem Rutsch eingeben kann, ohne irgendwelche Zusatztasten

D
33 Beiträge seit 2005
vor 18 Jahren

Also wenn ich ein Datum eingeben soll, dann nutze ich den Nummernblock. Und da sind die Pfeiltasten näher dran, was also schneller geht.. und ein Komma ist sogar im Nummernblock enthalten, jedenfalls bei mir. somit ist das nochmals schneller..

Wenn man was braucht ist es nicht da, ansonsten liegts im Weg rum...

T
210 Beiträge seit 2006
vor 18 Jahren

Du könntest dafür sorgen, daß auch beim Drücken der Spacetaste das nächste Feld angewählt wird. Das dürfte den Usern noch am ehesten gefallen, da man die leichter und schneller trifft als . oder ,

dtp.KeyPress += delegate(object sender, KeyPressEventArgs e)
{
  if (e.KeyChar == ' ') e.KeyChar = '.';
};

Gruß,
T-Man

T
210 Beiträge seit 2006
vor 18 Jahren

Du kannst auch noch die Enter-Taste als "Weiter"-Taste zulassen:

dtp.KeyPress += delegate(object sender, KeyPressEventArgs e)
{
  if (e.KeyChar == ' ' || e.KeyChar == '\\r') e.KeyChar = '.';
};

Gruß,
T-Man

X
2.051 Beiträge seit 2004
vor 18 Jahren

im prinzip ist so was möglich. s. bsp,

    class DateTimePickerX : DateTimePicker
    {
        int c = 0;
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x102:
                    c++;
                    base.WndProc(ref m);
                    if (c == 2 || c == 4 || c == 8)
                        m.WParam = new IntPtr((int)'.');
                    else
                        return;

                    if (c == 8) 
                        c = 0;
                    break;
            }
            base.WndProc(ref m);
        }
    }

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 18 Jahren

danke,
das ist ja die Lösung für mein Problem schlechthin
aber was bedeutet Message 0x102 ?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo CB.NET,

0x102 ist die Win32-Windows-Message WM_CHAR.

herbivore

X
2.051 Beiträge seit 2004
vor 18 Jahren

WM_CHAR

T
210 Beiträge seit 2006
vor 18 Jahren

Ganz sauber ist die Lösung mit dem Zähler c aber nicht.

Wenn man nämlich mal tatsächlich einen Punkt eingibt oder so, kommt die Zählung durcheinander...

Gruß,
T-Man

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo T-Man,

es gibt so gar noch mehr Probleme: Backspace, Entf, Einfg, Strg+V, Klicken mit der Maus ...

herbivore

X
2.051 Beiträge seit 2004
vor 18 Jahren

Deshalb ist das auch keine Lösung, sondern dient nur zur Anregung, wie man so was realisieren kann. Man muss dabei noch viel berücksichtigen. Was macht man bei „Sonderzeichen“, wie ist es mit anderen Cultures, was mache ich, wenn Benutzer 32 in Tage rein schreibt, etc.