vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · ComboBox   |   VB-Versionen: VB4, VB5, VB620.07.05
TextBox/ComboBox-Inhalt rückwärts selektieren

Manchmal ist es besser, den Inhalt einer TextBox bzw. ComboBox rückwärts zu selektieren - und zwar dann, wenn der Inhalt größer (länger) ist als das Control selbst.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  12.854 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Bezugnehmend auf den Tipp  AutoComplete in der ComboBox wurde im Forum vor kurzem folgendes Problem geschildert: "Ich habe aus der Tipps & Tricks-Sektion den Tip "AutoComplete für eine Combobox" in mein Programm eingebaut und das funktioniert alles wunderbar. Nur wenn es in der Combobox Einträge gibt, die so lang sind, dass sie nicht komplett in die Textbox der Combobox passen, wird automatisch nach dem Setzen der SELLENGTH-Eigenschaft ans Ende des Textes gescrollt und die Eingabemarke ist ausserhalb des sichtbaren Bereichs.

In diesem Fall wäre es also sinnvoller, den Inhalt der ComboBox nicht von links beginnend bis ans Ende zu selektieren, sondern umgekehrt vom Ende rückwärts bis zur aktuellen Eingabeposition. Leider unterstützt die SelLength-Eigenschaft keine negativen Wertzuweisungen, so dass wir uns etwas anderes einfallen lassen müssen. Man könnte bspw. den Cursor ans Ende des Textes setzen und dann x-Zeichen rückwärts selektieren, indem man die Shift+Pfeil-nach-links Taste x-mal sendet.

Statt:

.SelStart = sPos
.SelLength = Len(.Text) - sPos + 1

setzen wir folgenden Code ein:

.SelStart = Len(.Text)
SendKeys "+{LEFT " & CStr((Len(.Text) - sPos)) & "}"

Leider ruckelt dann die Darstellung bei jedem Tastendruck ein wenig, was man aber wie folgt abstellen kann:

Option Explicit
 
' Benötigte API-Deklaration
Private Declare Function LockWindowUpdate Lib "user32" ( _
  ByVal hwndLock As Long) As Long
With Combo1
  ...
  LockWindowUpdate .hWnd
  .SelStart = Len(.Text)
  SendKeys "+{LEFT " & CStr((Len(.Text) - sPos)) & "}"
  LockWindowUpdate 0&
End With