Announcement

Collapse
No announcement yet.

Tab UND Return

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

  • Tab UND Return

    Hallo!

    Ich habe mehrere einzeilige TextBoxen. Wie kann ich das Verhalten von TAB (Springen zum nächsten Control) auch mit RETURN auslösen? Also statt mit TAB mit RETURN von einem Control zum nächsten.

    Bruno

  • #2
    Hallo,

    am einfachsten wenn du dir selbst eine TextBox erstellst die von der Standard-TextBox erbt und die eigene TextBox verwendest.

    Hört sich ein wenig kompliziert an, ist es aber nicht:
    [highlight=vb.net]
    Imports System.Windows.Forms

    Namespace WindowsFormsApplication1
    Public Class gfTextBox
    Inherits TextBox
    '---------------------------------------------------------------------
    ''' <summary>
    ''' Beim Drücken von ENTER wird ein TAB gesendet.
    ''' </summary>
    ''' <param name="e"></param>
    Protected Overloads Overrides Sub OnKeyPress(e As KeyPressEventArgs)
    MyBase.OnKeyPress(e)

    If e.KeyChar = CChar(Keys.Return) Then
    SendKeys.Send("{TAB}")
    e.Handled = True
    End If
    End Sub
    End Class
    End Namespace
    [/highlight]
    Das ist der ganze Code für die eigene TextBox. Diese erscheint nach dem Kompilieren im Designer (meist) oben links (sonst unten). Einfach diese verwenden - der Rest ist gleich wie der Standard-TextBox.

    mfG Gü
    Zuletzt editiert von gfoidl; 19.10.2008, 17:17.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Gute Idee!

      Probiers gleich aus

      Bruno

      Comment


      • #4
        Hallo Gü,

        ich hab es auch ausprobiert, es hat super funktioniert, die Betonung liegt auf hat.

        "normale" Keys werden durch das OnKeyPressed-Ereignis abgefangen, aber TAB oder ENTER leider nicht (mehr - es hat eben funktioniert)

        Code:
        
        PublicClass meineToolStripComboBox1
        Inherits ToolStripComboBox
        ProtectedOverloadsOverridesSub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        MyBase.OnKeyPress(e)
        Try
        If e.KeyChar = CChar(Keys.Tab.ToString) Then
        SendKeys.Send("{ENTER}")
        e.Handled = True
        EndIf
        Catch ex As Exception
        MessageBox.Show(ex.ToString)
        EndTry
        EndSub
        EndClass
        
        Wo könnte ich nach der Ursache suchen: MyBase?


        Gruß
        Christian

        Comment


        • #5
          Hallo,

          geht auch bei der ToolStripComboBox:
          [highlight=vbnet]
          Imports System.Windows.Forms

          Namespace WindowsFormsApplication1
          Public Class gfToolStripCombobox
          Inherits ToolStripComboBox
          Protected Overloads Overrides Sub OnKeyPress(e As KeyPressEventArgs)
          MyBase.OnKeyPress(e)

          If e.KeyChar = CChar(Keys.[Return]) Then
          SendKeys.Send("{TAB}")
          End If
          End Sub
          End Class
          End Namespace
          [/highlight]

          Auf TAB braucht nicht geprüft werden, denn bei TAB wird eh zum nächsten gesprungne.

          Hast du im Menü dann auch die selbst erstellte ToolStripComboBox verwendet - sonst wärs noch die von .net und da gehts nicht.

          Nachdem die Klasse mit der eigenen erstellt worden ist -> kompilieren -> im Designer beim Menü ist die eigene in der Auswahl enthalten.

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Hallo Gü,

            entschuldige bitte, ich hab mich wahrscheinlich nicht richtig ausgedrückt!

            Auf TAB braucht nicht geprüft werden, denn bei TAB wird eh zum nächsten gesprungen.
            ich möchte eben nicht zum nächsten Steuerelement!

            Ich habe das Problem, mit der der AutoComplete-Funktion:
            • ich suche ein neues Item mit einer Buchstaben-Folge.
            • die Auswahl muss mit "ENTER" bestätigt werden weil nur dann das BindingSource.CurrentChanged oder das ComboBox.SelectedIndexChanged Ereignis ausgelöst wird!
            • Wird diese Auswahl nicht mit "ENTER" sondern mit "TAB" bestätigt, steht zwar das gewünschte Item in der ComboBox - aber ich komme nicht an den geänderten Wert heran! (Ereignis??)
            darum hab ich mir gedacht () TAB-abfangen und zu Return umwandeln.

            Hast du im Menü dann auch die selbst erstellte ToolStripComboBox verwendet - sonst wärs noch die von .net und da gehts nicht.
            -> hab ich gemacht

            Nachdem die Klasse mit der eigenen erstellt worden ist -> kompilieren -> im Designer beim Menü ist die eigene in der Auswahl enthalten.
            -> ist auch da wo sie sein soll

            ganz im Vertrauen - ich trau der Sache nicht. (automatischer Code und so, du verstehst?)

            Ich kann mir nicht erklären wieso [Zitat Galileo Openbook Visual Basic 2005 von Andreas Kühnel]
            Zeichentasten: Zu diesen zählen alle Tasten, mit denen Buchstaben, Zahlen und Symbole eingegeben werden können. Bei den verarbeiteten Zeichencodes handelt es sich um die Zeichen des ASCII-Zeichensatzes, die intern als 16-Bit-Unicode behandelt werden.
            beim

            Code:
            Protected Overloads Overrides Sub OnKeyPress(e As KeyPressEventArgs)
            "ankommen" (mit Debugger geprüft) und TAB und RETURN nicht??

            (vor allem, ich schwöre, es hat ja ganz kurz funktioniert!!!)

            Gruß
            Christian

            Comment


            • #7
              Hi Christian,

              ja jetzt verstehe ich dein Problem. ENTER geht, TAB geht nicht.

              Ich hab einwenig (eigentlich viel) probiert und bin draufgekommen dass TAB bei TextBox, ComboBox standardmäßig im KeyDown nicht behandelt wird, da es ein "Steuerzeichen" für Winform ist.

              Abhilfe schafft hier:
              [highlight=c#]
              public class gfToolStripComboBox : ToolStripComboBox
              {
              protected override bool IsInputKey(System.Windows.Forms.Keys keyData)
              {
              if (keyData == Keys.Tab) return true;

              return base.IsInputKey(keyData);
              }
              }
              [/highlight]

              Ich dachte auch dass die ToolStripComboBox eine normale ComboBox ist - doch obiger Trick funktioniert hier leider nicht

              Es geht nur dann wenn rechts von der ToolStripComboBox eine TextBox ist.

              Eine Quick and Dirty-Lösung wäre das Leave-Ereignis zu verwenden.
              zB
              [highlight=c#]
              private void toolStripComboBox1_Leave(object sender, EventArgs e)
              {
              textBox1.Text = toolStripComboBox1.Text;
              }
              [/highlight]

              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Hallo Gü,

                noch einmal danke und trotzdem bleib ich an dieser "Sache" dran -> es hat ganz kurz funktioniert - leider hab ich "irgendwas" - "irgendwo" am Code geändert und aus war es!

                Gruß Christian

                PS.: ich hab schon wieder ein neues Problem -> neuer Beitrag

                Comment

                Working...
                X