vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Listenfeld-KeyDown 
Autor: ModeratorDieter (Moderator)
Datum: 14.09.01 21:46

Hallo Marcel,

also spontan fällt mir hier folgender Vorschlag ein:

Im List1_KeyPress-Ereignis fängst Du die gedrückte Taste ab und speicherst diese in einer unsichtbaren TextBox (die TextBox darf zunächst keinen Text enthalten!). Dann setzt Du KeyPress = 0, so dass das Zeichen von der ListBox nicht automatisch zur Suche genommen wird. Drückt man nun die Enter-Taste, dann suchst Du manuell in der ListBox nach dem Eintrag.

Das ganze würde dann in etwa so aussehen:
<code>Option Explicit
 
<font color=green>' Schnelle Suche innerhalb einer ListBox</font>
Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
        As Long, ByVal wParam As Long, ByVal lParam As _
        String) As Long
 
Private Const LB_FINDSTRING = &H18F
 
<font color=green>' Prüft, ob ein Wert in einer ListBox enthalten ist
' und gibt als Ergebnis den ListIndex zurück
' (-1, wenn nicht vorhanden)</font>
Public Function IsInListe(Liste As ListBox, _
  ByVal Item As String) As Integer
 
  IsInListe = SendMessage(Liste.hwnd, _
    LB_FINDSTRING, -1, Item)
End Function
 
<font color=green>' Zeichen auswerten</font>
Private Sub List1_KeyPress(KeyAscii As Integer)
  Dim iIndex As Integer
 
  If KeyAscii = 13 Then
    <font color=green>' manuelle Suche starten</font>
    KeyAscii = 0
    iIndex = IsInListe(List1, Text1.Text)
    If iIndex >= 0 Then List1.ListIndex = iIndex
    Text1.Text = ""
  ElseIf KeyAscii = 27 Then
   <font color=green>' ESC - bisherige Eingabe löschen</font>
   KeyAscii = 0
   Text1.Text = ""
  Else
    <font color=green>' Eintrag in unsichtbare Textbox</font>
    Text1.Text = Text1.Text + Chr$(KeyAscii)
    KeyAscii = 0
  End If
End Sub</code>
Nun zu Deinem Problem in VBA/Excel:
Versuch's mal, wenn Du die Schleife zunächst mit Exit For bzw. Exit Do verlässt und dann erst ausserhalb der Schleife das Exit Sub setzt.

Cu
Dieter
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Listenfeld-KeyDown37Marcel14.09.01 21:15
Re: Listenfeld-KeyDown427ModeratorDieter14.09.01 21:46

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel