C# Instantsuche in einer Combobox

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo Leute,
brauch wieder mal dringend Hilfe ;D

Folgendes Problem:
Ich habe eine Combobox die mit Produktbezeichnungen aus einer Datenbank gefüllt wird.
Jetzt will ich aber wenn ich eine Zeichenfolge (z.B. abc) eintippe, dass mir dann alle Items (in denen diese Zeichenfolge vorkommt) aus dieser Combobox eingeblendet werden.
So, dass ich dann mit einem Mausklick oder vielleicht Pfeiltasten + Tabulator dann eines der Items auswählen kann und es als SelectedItem gesetzt wird.

Eine andere Möglichkeit. Mir soll einfach nur das erste Item in dem diese Zeichenfolge vorkommt eingeblendet werden.


Hat jemand eine Idee wie man das realisieren könnte?
Den Text und die eingetippte Zeichenfolge speicher ich im TextChanged Event in eine Variable.
Nach einem Item suchen wo dieser String vorkommt könnte ich ja mit Combobox.FindString(s), aber wie stelle ich es an, dass mir das Item dann nur eingeblendet wird, so dass ich es nur per Klick auswählen kann?

Ich will ja nicht, dass meine eingetippte Zeichenfolge resetet oder mit dem Text des erstbelibiegen Items ersetzt wird.
Falls dieses Item nämlich nicht das gewünschte ist, soll man schließlich weitere Zeichen dazutippen können und bei jedem Tastenschlag soll die Liste der eingeblendeten Items (in denen der String vorkommt) aktualisiert werden.


Hoffe ihr könnt mir das weiterhelfen?!

Und danke schon mal im Vorraus.


PS: Die AutoCompleteSource mit dem AutoCompleteMode wäre schon mal ein Schritt in die richtige Richtung, hat aber einen rießen Hacken. Er blendet mir nur Items ein bei denen die eingetippte Zeichenfolge nur am Anfang vorkommt.

Kommt aber blöd, wenn das Produkt "Sapphiere Radeon blabla" heißt und ich tippe dann nur "Radeon" ein und er findet nichts.... das ist natürlich nicht so dolle dann :D :D :D
 
Redest du von Windows Forms?
Wenn ja würde ich dir empfehlen, das in WPF zu realisieren.
Da geht es super easy!

Hier ein Beispiel!
 
Zuletzt bearbeitet:
Moment, ich suche das mal kurz raus, hatte mal was.

EDIT:
Für die erste Möglichkeit: http://social.msdn.microsoft.com/Fo...8-4f4e-9c60-879a4f1182ea/combobox-auto-select
http://stackoverflow.com/questions/11780558/c-sharp-winforms-combobox-dynamic-autocomplete
Für die zweite, nach der ich ursprünglich suchen wollte, gab es irgendeine WinAPI-Funktion, die ich aber gerade nicht finde. :(

EDIT2: War glaube ich irgendetwas in dieser Richtung:
http://msdn.microsoft.com/en-us/library/ms907597.aspx

Gab es glaube ich auch für Comboboxen.
 
Zuletzt bearbeitet:
@J4CK50N: In WPF kann ich es nicht umsetzen. Habe bereits eine vollständige Anwendung programmiert und jetzt soll eben eine Combobox mit der Instantsuche erweitert werden.

@KamehamehaX10: Danke für den Link werd ich mir sofort angucken.


EDIT: Sorry, aber die Links helfen mir nicht weiter. Der erste ist für WPF und der zweite behandelt eine ganz andere Problemstellung als ich sie hab. Ich will eben, dass bei der Combobox nicht nach dem Anfang gesucht wird, sondern auch in der Mitte... wo auch immer diese Zeichenfolge vorkommt...

Ich tippe ein: "Radeon"
Item heißt aber: "Sapphiere Radeon"

Sapphiere Radeon soll dann aber trotzdem eingeblendet werden obwohl der Begriff nicht am Anfang sondern am Schluss steht! ;)
 
Zuletzt bearbeitet:
Danke an Yuri.
Damit hats geklappt, aber da stand der Code wäre im "TextChanged" Event einzusetzen. Das hat aber zu Fehlern geführt. Viel besser funktionierts schon, wenn man es im "TextUpdated"-Event einsetzt.

Ein Problem hab ich zwar immernoch, aber das ist nicht weiter schlimm... Mehr ein Schönheitsfehler :D :D

Wenn ich das erste mal was eintippe, dann springt er zu dem ersten Item das mit diesem Buchstaben anfängt.
Erst danach kann ich meinen Text eingeben.

Der andere Schönheitsfehler ist, dass während der Eingabe die Maus ausgeblendet und nicht mehr angezeigt wird, wenn diese sich über dem Formular befindet. Erst nach drücken der Eingabe- oder Escape-Taste wird die Combobox geschlossen und die Maus wieder eingeblendet.


Wie gesagt man kann mit dem leben, aber wenn jemand einen Weg kennt dieses zu beheben, dann bin ich jederzeit offen für Ratschläge :D :D :D
 
Das mit dem Mauszeiger passiert, nachdem du die Combobox aufklappst (keine Ahnung warum..)
So bekommst du ihn wieder in den Vordergrund:
Code:
...
comboBox1.DroppedDown = true;
Cursor.Current = Cursors.Default;
 
Zurück
Oben