Announcement

Collapse
No announcement yet.

entf-Taste in Combobox deaktivieren?

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

  • entf-Taste in Combobox deaktivieren?

    hallo zusammen,

    kann mir jemand sagen, wie ich das drücken der Entf-Taste (Delete) in einer Combobox deaktivieren kann?
    Meine Comboboxen sind so eingerichtet, das der Benutzer zb. in der Länderauswahl über die Eingabe von "DE" direkt den Wert "Deutschland" erhält. Durch diese Einstellung bedingt reagiert die Combobox jedoch auch auf das drücken der Entf-Taste in sofern, dass das erste Element der Combobox ausgewählt wird. Dieses Verhalten ist aber unerwünscht und in einigen Fällen sogar recht schädlich für meine Daten.

    Ich hab es schon mit folgenden Events probiert: KeyPress, KeyDown und OnKeyDown.

    Code in KeyDown und OnKeyDown
    [highlight=vb]
    If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then
    e.SuppressKeyPress = True '## Ereignis nicht an die Combobox senden
    End If
    [/highlight]

    Mit der Backspace-Taste (Keys.Back) funktioniert es, nur diese Entf-Taste nicht
    Die Selection der Combobox springt bereits vor dem Auslösen des Ereignisses auf den ersten Wert(der meistens ein leerer Wert ist).

    Hat jemand eine Idee?


    Edit:
    Hier die Einstellungen meiner Combobox
    [highlight=vb]
    CBox.DropDownStyle = ComboBoxStyle.DropDownList
    CBox.IntegralHeight = False
    CBox.AutoCompleteSource = AutoCompleteSource.ListItems
    CBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    [/highlight]
    Zuletzt editiert von Andreas Mahr; 08.12.2008, 10:25.

  • #2
    Hallo Andreas,

    Problematisch ist, dass der Entf-Key das ComboBox.KeyPress - Event nicht triggert.
    Ich habs bisher nur über einen Umweg hinbekommen:

    Beim ComboBoxIndexChanged Event den bisherigen Index merken.
    Beim KeyDown Event den Index der ComboBox auf den gemerkten Wert setzen, sofern die Taste "Keys.Delete" entspricht. Einfacher hab ichs nicht hinbekommen, der Index der Combobox ist nämlich schon neu gesetzt, wenn das KeyDown-Event getriggert wird.

    [highlight=vbnet]

    Dim mIntCurrentIdx As Integer
    Dim mIntLastIdx As Integer

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    mIntLastIdx = mIntCurrentIdx
    mIntCurrentIdx = ComboBox1.SelectedIndex
    End Sub

    Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
    If e.KeyCode = Keys.Delete Then
    ComboBox1.SelectedIndex = mIntLastIdx
    End If
    End Sub

    [/highlight]

    Comment


    • #3
      Hallo,

      vielleicht kann die Entf-Taste im KeyPress abgefangen werden wenn diese als InputKey gesetzt wird (habs nicht probiert).

      Dazu von der ComboBox ableiten:
      [highlight=vbnet]
      Public Class gfComboBox
      Inherits ComboBox
      Protected Overloads Overrides Function IsInputKey(ByVal keyData As Keys) As Boolean
      If keyData = Keys.Delete Then
      Return True
      End If

      Return MyBase.IsInputKey(keyData)
      End Function
      End Class
      [/highlight]

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

      Comment


      • #4
        Originally posted by basti01985 View Post
        Hallo Andreas,

        Problematisch ist, dass der Entf-Key das ComboBox.KeyPress - Event nicht triggert.
        Ich habs bisher nur über einen Umweg hinbekommen:

        Beim ComboBoxIndexChanged Event den bisherigen Index merken.
        Beim KeyDown Event den Index der ComboBox auf den gemerkten Wert setzen, sofern die Taste "Keys.Delete" entspricht. Einfacher hab ichs nicht hinbekommen, der Index der Combobox ist nämlich schon neu gesetzt, wenn das KeyDown-Event getriggert wird.

        [highlight=vbnet]

        Dim mIntCurrentIdx As Integer
        Dim mIntLastIdx As Integer

        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        mIntLastIdx = mIntCurrentIdx
        mIntCurrentIdx = ComboBox1.SelectedIndex
        End Sub

        Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ComboBox1.KeyDown
        If e.KeyCode = Keys.Delete Then
        ComboBox1.SelectedIndex = mIntLastIdx
        End If
        End Sub

        [/highlight]
        wenn ich was in der CBox geändert hab, dann greift das Event. Aber wenn die Daten aus der Datenbank kommen und dann auf Entf gedrückt wird, ist mIntLastIdx = 0 und das stellt den Index dann halt doch wieder auf 0.

        Originally posted by gfoidl View Post
        Hallo,

        vielleicht kann die Entf-Taste im KeyPress abgefangen werden wenn diese als InputKey gesetzt wird (habs nicht probiert).

        Dazu von der ComboBox ableiten:
        [highlight=vbnet]
        Public Class gfComboBox
        Inherits ComboBox
        Protected Overloads Overrides Function IsInputKey(ByVal keyData As Keys) As Boolean
        If keyData = Keys.Delete Then
        Return True
        End If

        Return MyBase.IsInputKey(keyData)
        End Function
        End Class
        [/highlight]

        mfG Gü
        nein, das hilft leider auch nicht

        Comment


        • #5
          Originally posted by Andreas Mahr View Post
          wenn ich was in der CBox geändert hab, dann greift das Event. Aber wenn die Daten aus der Datenbank kommen und dann auf Entf gedrückt wird, ist mIntLastIdx = 0 und das stellt den Index dann halt doch wieder auf 0.
          Dann müsstest du in der Funktion die bei dir die Datenbankoperation ausführt und die Items in die Liste einpflegt eben genau den mIntLastIdx auf einen sinnvollen Wert setzen, eben auf den Wert der nach dem Einfügen markiert sein soll.

          Comment

          Working...
          X