Wie man die Autovervollständigung in einem Textfeld Vorschläge anzeigen, wenn leer
Ich bin mit der AutoComplete-Eigenschaften auf ein Textfeld (eigentlich eine ToolStripTextBox). Dies ist in Ordnung, außer es nicht zeigen, bis ich geben Sie zumindest ein Zeichen. Wie mache ich es, so die Vorschläge werden auch angezeigt, wenn das Textfeld leer ist?
Mode = Suggest
Source = CustomSource
Quelle eingestellt progamatically und auf 10 Einträge begrenzt
Alternativ, wenn jemand weiß, wie zu zwingen, die Vorschläge zeigen, programmatisch auf die OnEnter-Ereignis, das könnte eine Lösung sein
- Es ist mit Ihrem aktuellen input zu reduzieren die Liste der Möglichkeiten angezeigt werden. Wenn Sie eingegeben haben nichts in der textbox dann die mögliche Liste ist unendlich. Wenn es nicht unendlich ist (da haben Sie einen Satz endliche Liste), dann sollten Sie vielleicht erwägen, ein AutoVervollständigen-Kombinationsfeld verwenden?
- Mein set ist immer begrenzt auf 10 höchstens
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lösung ist, um zu wickeln, und rufen Sie die AutoSuggest-WinShell-Funktionen direkt. Dann können Sie diese Funktion aktivieren, ohne allzu viele Kopfschmerzen (und sogar ein paar extra für frei).
Unten ist ein lauffähiges Beispiel, das Ihnen erlaubt, um zu zeigen, das AutoSuggest-Liste, obwohl nichts in das Feld eingegeben (beim drücken der up/down Pfeile)
Gleichen code wie in diesem Gist: https://gist.github.com/sverrirs/e6a64faaab341882c3e801792f5e87ae
Sowie die Umsetzung von AutoCompleteExt
Berücksichtigen, dass dies ein hack. Ich konnte das problem lösen und die fehlende API-Funktionen zu tun trivial und unangenehme Sache. Ich zeige Euch das mal mit code:
Ist, Schreibe ein Leerzeichen nach jedem string in der AutoVervollständigen-Liste. Dann, es ist Ihre knowlodge über diese Tatsache, und verwenden Sie es für Ihre bequeme Ziel.
Zum Beispiel könnten Sie fügen Sie ein Leerzeichen in der
TextBox
wenn darauf geklickt wird, konzentriert, etc. (Beachten Sie, dass diese getan werden könnte, die mit einem beliebigen Zeichen. Die Idee ist, zu wissen, dass jeder string in der AutoVervollständigen-Liste beginnt mit den gleichen Zeichen)Du MUSS bewusst sein. In der Tat, erwägen
TextBox
bilden und verwalten die richtige trimmen der eingegebene string.Wieder, namens dieser empfehlenswert oder nicht ist Ihre eigene Entscheidung. Was diese Antwort neigt dazu, zu tun, ist, um das problem lösen zu wollen, eine
TextBox
lässt sich eine Vorschlagsliste, ohne die Eingabe mit den Einschränkungen der API, die auch als ein workaround oder ugly-hack.ExtendedTextBox
tut, ist validieren Sie die Eingabe mit derAutoCompletCustomSource
oder mit einerRegEx
(ich könnte mit einemComboBox
aber ich bin wiederverwenden eine erweiterte textbox, die enthält ein Symbol zu geben visuelles feedback über die input). Wenn Fokus verloren und nicht mit einer gültigen Eingabe, lösche ich den text. Wenn das eingegeben wurde, und nicht mit einer gültigen Eingabe, deaktivieren Sie den text,My.Computer.keyboard.SendKeys(" ")
undSendkeys.flush()
. Die Eigenschaft, wird der input-string:TextBox1.Text.TrimStart(" ")
Wieder, die Eingabe muss verwaltet werden, mit Vorsicht zu genießen.Ich bin mir nicht sicher, ob es irgendeine Lösung für dieses, vor allem, da der Kummerkasten wird automatisch beendet, wenn Sie löschen Sie alle text in der
TextBox
.Ein workaround könnte sein, die haben
ComboBox
überlappen sich dieTextBox
ist und können Sie mit all den Optionen, aber wenn einer von Ihnen ausgewählt sind oder wenn etwas eingetippt wird Sie automatisch auf denTextBox
und zeigen, dass statt.Obwohl ich würde vorschlagen, dass in diesem Szenario würde ich wahrscheinlich betrachten loswerden der
TextBox
ganz einfach stick mit einemComboBox
da das ist, was es dort für.Zeigen, das dropdown-programmgesteuert in einer
ComboBox
Blick auf dieSendMessage
API und die NachrichtCB_SHOWDROPDOWN
(und wenn ich mich richtig erinnere, können Sie verwenden die gleiche API/message aber mit unterschiedlichen Parametern), um es zu schließen programmgesteuert, wenn nötig, auch).Gibt es keine solche Möglichkeit .net-api. Noch mehr gibt es solche Möglichkeit nicht in IAutoComplete - shell-Schnittstelle, die .Netto ist mit intern.
So sollten Sie mit Ihr Leben, oder implementieren Sie eigene auto-complete Verhalten ohne Verwendung der Voreinstellung. Sie können combo-box drop-down-wie bereits vorgeschlagen, oder sogar erstellen Sie Ihre eigenen auto-vervollständigen-Steuerelement (in meiner Anwendung habe ich gewählt, die Letzte Variante).