"We are back" « oc.at

C# - ComboBox - Rückwärts Selektierung

AngelOfDeath 15.06.2005 - 16:36 2372 9
Posts

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
Huhu,

ich hab eine ComboBox bei der ich eine eigene Selektierung vornehmen will. Normalerweise wenn man
Code:
cmb.SelectAll();
oder
Code:
cmb.Select(5, 3);
ausführt wird von links nach rechts markiert, sodass der Cursor am Ende der Selektion steht.
Ich brauche nun aber den Cursor genau auf der anderen Seite, also links vom markierten Text. Wenn der Text nämlich länger ist, als die ComboBox breit, dann wird bei SelectAll() der Text so verschoben, dass das Ende zu sehen ist (weil ja dort nun der Cursor steht). Genau das will ich aber nicht haben, egal was markiert ist, der Cursor soll am Anfang der Selektion stehen.
Ich habs schon probiert mit
Code:
cmb.Select(8, -3);
aber die Länge der Markierung darf nicht unter 0 sein, sonst bekomm ich eine Exception.
Hoffe ihr könnt mir da weiterhelfen.

MfG
AoD
Bearbeitet von AoD am 20.06.2005, 10:56 (nicht hinzugefügt)

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
niemand eine Idee?
es kann auch eine Lösung mit Windows API sein.

Frys_Assassin

information keeper
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
ich verstehe nicht ganz ... du markierst einen text in einer combo-box?

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
Ich glaub ich werds mal anhand von Bildern erklären.
Ich hab mir ein Control gebastelt, das im Prinzip nur eine ComboBox enthält, aber um einige Funktionen erweitert, so wird zB beim Tippen, die Liste aufgeklappt, es wird der letzte Wert gespeichert etc.
click to enlarge
Die wichtigste Funktion ist das automatische Vorschlagen, also wenn ich 99 eintippe, wird der erste Eintrag mit 99 ausgewählt und der Rest ist markiert, damit ich zB nur eine 9 tippen muss, und dann der 999er ausgewählt ist.
Nur schaut das bei langem Text nach dem Tippen so aus:
click to enlarge
anstatt so
click to enlarge (ich hab diese Markierung mit der Maus gemacht, aber es soll ja automatisch geschehen)

beim ersten Bild ist von links nach rechts markiert (Cursor blinkt ganz rechts) und beim zweiten von rechts nach links (Cursor blinkt dort wo die Eingabe eigentlich stattfindet).

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
kann ich mir nicht vorstellen wie das gehen soll... aber muss es denn überhaupt markiert sein?

Für einen Vorschlag musst du ja nicht unbedingt den Text reinpasten - im Gegenteil, die Win-Combobox hat afair sowieso schon eine solche Funktion eingebaut, warum sollte man da noch was dazu coden?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25713
irgendwie bekommt man sicher die reichweite der markierung, also start und endposition. und mit denen müsst man ja dann die markierung neu setzen können.

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
ich kann ja auch mit cmb.Select(5, 3); bei 5 starten und 3 Zeichen markieren. allerdings geht die Markierung nur nach rechts (=> Cursor blinkt am Ende). Ich bräuchte aber cmb.Select(5, -3); also bei 5 anfangen und 3 Zeichen davor markieren, damit der Cursor nun am Anfang der Markierung steht

@watchout, nein geht nicht, er scrollt zwar so, dass das passende item im dropdown sichtbar ist, aber er markiert es nicht. sonst hätt ich eh gerne drauf verzichtet.

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3344
also zumindest bei .NET 2.0 Beta 2 tut er genau das (AutoCompleteMode SuggestAppend, AutoCompleteSource ListItems)

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
leider keine alternative, weil mein projekt zu groß ist, um es in kurzer zeit auf 2.0 Tauglichkeit zu testen (soviel zeit bleibt mir nicht mehr ;))

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11346
Ich hab vorige Woche ein bisserl gesucht, aber keine Lösung gefunden. .NET kann das scheinbar einfach nicht (Win32 direkt allerdings schon).
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz