Announcement

Collapse
No announcement yet.

Combobox mit Return zum nächsten Element !

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Combobox mit Return zum nächsten Element !

    Hallo,

    In einem einfachen Dialog mit Eingabefeldern (TextBox, Combobos usw.) soll der Anwender durch drücken der Eingabetaste(Return) zum nächsten Eingabefeld springen können.

    Als Routine nutze ich

    Code:
    if (e.KeyChar == (char)13)
    {
          Control sel_Ctrl = this.ActiveControl;
          bool next_Control = true; 
          while (next_Control)
           {
                    sel_Ctrl = GetNextControl( sel_Ctrl, true);
                 if (sel_Ctrl != null & sel_Ctrl.CanFocus & sel_Ctrl.TabStop)
                    {
                             sel_Ctrl.Focus();
                             next_Control = false;
                    }
           }
           e.Handled = true;
    }
    Das funktioniert auch ganz gut, wenn der Handle jedoch auf einer Combobx liegt kommt kommt der Anwender nicht weiter.
    Auch das direkte Ansprechen der KeyPress-Eigenschaft der Combobox hilft hier nicht.

    Vieleicht kann jemand von Euch mir weiter helfen.


    cu Jan

  • #2
    Hi,
    verstehe das problem nicht ganz.
    Wenn du deinen Code oben in das KeyPress Event von deinem Form haust und die Property KeyPreview auf true setzt sollte es funktioniert.

    Ich würde allerdings bei deiner If-Anweisung mit "&&" verknüpfen und nicht mit "&". Sont gibts nen crash weil er versuchen wird "sel_Ctrl.CanFocus" zu prüfen aber "sel_Ctrl" null ist.

    MfG
    Koch

    Comment


    • #3
      Hi,

      danke für die schnelle Antwort, und die kurze Anregung mit "&&".

      KeyPreview wird beim Load des Formulars auf True gesetzt. Auch das vorherige setzen des Property im Editor hat nichts gebracht.

      cu Jan

      Comment


      • #4
        Hallo Jan,

        zunächst schlage ich Dir ein einfacheres Verfahren vor, das diverse ifs einspart:
        Code:
        SelectNextControl(ActiveControl, true, true, true, true);
        Dieses Verfahren funktioniert zwangsläufig nicht bei Buttons, weil dort mit Return der Click ausgelöst wird. Ich vermute, das gleiche gilt auch für ComboBoxen, weil damit das Item ausgewählt wird.

        Vielleicht hilft ein Umweg über SuppressKeyPress und/oder PreviewKeyDown. Ein Beispiel ist zu finden unter A new way of saying IsInputKey: PreviewKeyDown.

        Gruß Jürgen

        Comment


        • #5
          Hallo,

          danke für die gargelegten Beispiele, aber es sieht so aus, als wenn die Combobox den Fokus nicht weitergibt, egal ob über

          Code:
          Control sel_Ctrl = this.ActiveControl;
          SelectNextControl(sel_Ctrl, true, true, true, true);
          e.Handled = true;
          
          als KeyPress-Ereignis oder über das PreviewKeyDown-Ereignis der Combobox.
          Ich bin jetzt den Weg über die direkte Zuweisung des nächsten Controls gegangen.
          Diese Zuweisung erfolgt natürlich nur bei der Combobox.

          Code:
          private void comboBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
          {
                switch (e.KeyCode)
                { 
                      case Keys.Return:
                              textBox1.Focus();
                              break;
                      default:
                             break;
                }
          }
          
          was haltet ihr davon, momentan läuft es eigentlich wie vorgestellt.

          cu Jan

          Comment


          • #6
            Welches Event benutzt du denn bei deinem ersten vorschlag?
            Hab es bei mir getestet und es hat funktioniert...

            Comment


            • #7
              Hallo,

              das erste Beispiel befindet im KeyPress-Event des Forms

              Code:
              private void Form_LogIn_KeyPress(object sender, KeyPressEventArgs e)
              {
              if (e.KeyChar == (char)Keys.Enter)
              {
              Control sel_Ctrl = this.ActiveControl;
              SelectNextControl(sel_Ctrl, true, true, true, true);
              e.Handled = true;
              }
              }
              KeyPreview wird beim Form-Load auf True gesetzt.

              cu Jan

              Comment


              • #8
                Warum setzt du KeyPreview erst onLoad auf true? Das geht auch im Designer.
                bist du deinen Code mal im Debugger durch gegangen? Wird das KeyPress Event überhaut gefeuert wenn du in der comboBox auf Enter drückst?

                Greetz
                Koch

                Comment

                Working...
                X