Announcement

Collapse
No announcement yet.

Textbox: Return abfangen und Focus weitergeben --> BEEP

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

  • Textbox: Return abfangen und Focus weitergeben --> BEEP

    hallo zusammen

    ich möchte in einer textbox im event 'keydown' die taste 'return' abfangen, um sogleich den fokus auf das nächste control zu leiten. mit folgendem fragment tut es das eigentlich auch ganz schön...

    private void txt_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
    if( e.KeyCode == Keys.Return )
    {
    SendKeys.Send( "{TAB}" );
    e.Handled = true;
    }
    }

    ...jedoch erklingt jedes mal ein BEEP, was tun?

    grüsse

    yvan

  • #2
    Hi.

    In Delphi unterdrücke ich den Beep folgendermaßen:

    <PRE>
    procedure TMyForm.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    if key = #13 then key := #0;
    end;
    </PRE&gt

    Comment


    • #3
      Hallo,

      das störende MessageBeep kommt immer dann, wenn das "falsche" Ereignis abgefangen wird. Das folgende Beispiel demonstriert, wie man alle TextBoxen im Formular über die ENTER-Taste verlassen kann, ohne das ein Beep stört. Das Formular selbst wertet das Event <b>KeyPress</b> aus, wobei die Formular-Eigenschaft <b>KeyPreview</b> vorher aktiviert wird:

      <pre>
      private void Form1_Load(object sender, System.EventArgs e)
      {
      this.KeyPreview = true;
      }

      private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
      {
      if (e.KeyChar == (char)13)
      {
      Control aCtrl = this.ActiveControl;
      bool bSearchNextControl = true;
      while (bSearchNextControl)
      {
      aCtrl = GetNextControl(aCtrl, true);
      if (aCtrl != null & aCtrl.CanFocus & aCtrl.TabStop)
      {
      aCtrl.Focus();
      bSearchNextControl = false;
      }
      }
      e.Handled = true;
      }
      }
      </pre>
      P.S: Der zu Delphi-Zeiten übliche Trick funktioniert beim .NET-Framework nicht, da dort die KeyPressEventArgs-Members readonly sind

      Comment


      • #4
        Hallo

        Zuerst mal danke für die Wortmeldungen. Leider ist es ja so, dass sich dieses Problem nicht in einem Form abspielt, sondern dass ich ein Windows-UserControl schreiben möchte, welches durch Return verlassen werden kann. Warum es im UserControl kein Attribut 'KeyPreview' gibt weiss ich zwar nicht stört mich aber trotzdem

        Nun gut, dann gehts weiter...

        Grüsse
        Yva

        Comment


        • #5
          Okay über KeyPress gehts... Noch eine Variante, welche den Focus etwas einfacher bewegen kann..

          //-----------------------------------------------------------------
          private void txt_KeyPress(object sender, KeyPressEventArgs e)
          {
          if( e.KeyChar == (char)13 )
          {
          SendKeys.Send( "{TAB}" );
          e.Handled = true;
          }
          }
          //----------------------------------------------------------------

          Comment


          • #6
            <PRE>private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
            {
            if(e.KeyData == System.Windows.Forms.Keys.Return)
            {
            textBox2.Focus();
            }
            }
            </PRE>
            das ist ein onkeydown event! Wenn Enter (Return) gedrückt wird, kann man den Focus beliebig weitergebe

            Comment


            • #7
              Hallo Andres Kosch,

              ich habe Dein Beispiel probiert. Aber bei mir piept´s leider immer noch...

              Ich kommen auch von Delphi, und die wunderbare Funktion "Key := #0" funktioniert ja tatsächlich aufgrun der ReadOnly-Eigenschaften der Member nicht...

              Woran kann es liegen???

              jl

              Comment


              • #8
                Hallo Andreas Kosch,

                hat sich bereits erledigt. Ich hatte vergessen "e.Handled = true" zu setzen.

                Bis dan

                Comment

                Working...
                X