PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB .Net]



Blackspeed
29.07.2004, 01:23
Hallo,

ich habe ein ComboBox, wo sich rechts davon ein Knopf befindet. Er öffnet einen Dialog um Dateien öffnen. Wenn die Datei angegeben wurde, erscheint der Pfad der Datei in der Combobox, bzw. wird dieser Hinzugefügt falls er noch nicht existiert.

Meine Frage. Ich speichere die Pfade in Zukunft. Sie werden aus der Registrierung in die Combobox eingefügt.
Also, wie kann ich jetzt ein Tooltip machen, der anzeigt, wie der Pfad komplett heißt? Es kann ja sein, dass der Pfad länger ist, als die ComboBox. Der ToolTip soll aber schon angezeigt werden bevor ich den Pfad aus der Liste ausgewählt habe.
Also praktisch wenn die Maus über den jenigen Pfad in der Liste der COmboBox zeigt.

Bitte helft mir.

TiKu
29.07.2004, 18:03
Wegen einer Lösung des Problems schaue ich heute abend mal. Ich möchte Dich erstmal drauf hinweisen, dass es mit .net bad practice ist, Einstellungen in der Registry zu speichern (zumal es bei Dir allerhand Einträge werden können). Es gibt sogar Gerüchte, dass die Registry bald abgeschafft werden soll.
Am besten ist es, Du speicherst die Einstellungen in einer xml-Datei in C:\Dokumente und Einstellungen\<User>\Anwendungsdaten\<Dein Programm>\. Beispiele dürften im Web zuhauf zu finden sein.

Blackspeed
29.07.2004, 18:13
Jaja, das wäre dann auch kein Problem. Es ist halt einfacher zu programmieren. :D

TiKu
29.07.2004, 22:18
Grmpf! Ich merke mal wieder warum ich noch keine .net-Programme schreibe. Sobald man etwas proggen will, was nicht komplett vom Framework abgedeckt ist, wird's ziemlich kompliziert. Das Hauptproblem ist, dass man die ListBox- und die ToolInfo-Klasse nicht für bereits vorhandene Fenster, von denen man nur das Handle hat, verwenden kann. Ich schreibe deshalb grad mein eigenes ToolTip-Control.*chatt*
Also ich werde noch ein wenig weiterprobieren, aber ich hab so meine Zweifel, dass ich es hinbekomme.

Mit VB6 hätte ich es inzwischen wahrscheinlich fertig. Und da heißt es immer, mit .net wird alles einfacher...

Blackspeed
29.07.2004, 23:02
Grmpf! Ich merke mal wieder warum ich noch keine .net-Programme schreibe. Sobald man etwas proggen will, was nicht komplett vom Framework abgedeckt ist, wird's ziemlich kompliziert.

--> :D

Ja, das ist gar nicht so leicht. Mein Problem ist, dass ich keine Möglichkeit geufnden habe, das selektierte zu erkennen.
Es wird erst als makiert angesehen, wenn der Text schon da drinnen steht.

So muss der Benutzer jedes mal die Liste "verlassen", um nachzusehen, wie der Pfad heißt. Ich denke mal, dass das sehr störend ist.

TiKu
30.07.2004, 02:25
Ich geb's auf.:P Solange man managed bleibt, ist das .net-Framework wirklich super, aber wenn man mal zwischen unmanaged und managed hin und her wechseln muss...:]
Kannst ja mal in microsoft.public.dotnet.languages.vb.controls oder so ähnlich fragen. Falls Du den Spaß hinbekommst, wäre ich übrigens an einer Lösung interessiert.

Ach ja, ToolTip-Texte für zu lange Items einer ListBox habe ich hinbekommen, das ist auch ziemlich simpel. Also als Notlösung könnte man im DropDown-Event die bereits vorhandene ListBox der ComboBox unterdrücken und eine eigene ListBox anzeigen.
Oder weißt Du wie man von der vorhandenen ListBox ein ListBox-Objekt erhält? Das Handle bekommt man per unmanaged Win32-API-Call raus, aber scheinbar ist es nicht möglich, daraus dann ein ListBox-Objekt zu bekommen. Control.FromHandle() funktioniert nur für Fenster, die per managed Code erzeugt wurden.

Blackspeed
30.07.2004, 11:49
Ich kann ja versuchen in der Newsgroup zu fragen. Das letzte Mal habe ich keine Antwort bekommen. :-[

TiKu
31.07.2004, 02:53
Hab Deine beiden NG-Threads gefunden. Der Grund dafür, dass Du keine Antwort bekommst, ist wahrscheinlich, dass Du das Problem etwas umständlich (-> zu wenig verallgemeinert) beschrieben hast. Auch hast Du bisher nur in Groups für VB.Net gefragt, wodurch Dir die unzähligen C#-Entwickler durch die Lappen gehen. Das schöne an .net ist ja gerade, dass sich Lösungen problemlos von einer Sprache zur anderen übertragen lassen. Englischsprachige Groups scheinen auch mehr Know-How versammelt zu haben als deutschsprachige.

Ich habe in den Groups microsoft.public.dotnet.framework.windowsforms.controls und microsoft.public.dotnet.languages.vb einen Thread "ToolTip for ListBox-/ComboBox-Items" eröffnet. Wenn das nix bringt, suche ich nochmal andere Groups raus.

Blackspeed
02.08.2004, 01:38
Cool Danke.

TiKu
03.08.2004, 01:17
Es wird immer besser... *buck* Also ich habe inzwischen eine schöne ToolTip-Klasse geschrieben, welche allen möglichen Schnickschnack kann. Das nächste Problem ist nun, dass die ComboBox sämtliche Mausnachrichten der ListBox verschluckt. Ich darf jetzt also noch einen Hook basteln, der die Mausnachrichten VOR der ComboBox empfängt.

Wie gesagt, für eine ListBox funktioniert alles wunderbar...

TiKu
03.08.2004, 03:23
Jetzt geht's so halb. Es gibt noch 2 Probleme:
1) Aus irgendeinem Grund kann der ListIndex, über dem sich der Mauszeiger gerade befindet, nicht ermittelt werden, wenn es sich um eine ComboBox handelt.
2) Der ToolTipText wird hinter der ListBox der ComboBox angezeigt.
Problem 1 lässt sich evt. lösen, Problem 2 wohl eher nicht (SetWindowPos geht hier nicht).

Ergo kommst Du besser, wenn Du die Standard-ListBox der ComboBox unterdrückst und bei Bedarf Deine eigene anzeigst. Wie das geht, steht glaube ich irgendwo auf www.vbaccelerator.com.

Hier (http://www.timosoft-software.de/download/stuff/ListBoxToolTip.zip) mein zusammengeschusterter Code. Auf Kommentare hatte ich keinen Bock. Die Klassen CMouseHook und CToolTip lassen sich theoretisch weiterverwenden, aber da sollten sie vorher besser getestet werden.

N8
TiKu

/e: Und hier (http://www.timosoft-software.de/download/stuff/ListBoxToolTip2.zip) eine Alternativversion. Sie hat dieselben Bugs, benötigt aber deutlich weniger Code und ist auch etwas sauberer geschrieben.

Blackspeed
03.08.2004, 17:42
Mein Gott ist das eine umständliche Sache für so einen kleinen Kram.

TiKu
04.08.2004, 03:35
Jepp! Ich hoffe, mit .net 2.0 wird das besser, sonst werde ich wohl erst mit .net 3.0 ernsthaft .net nutzen.
Version 3 (http://www.timosoft-software.de/download/stuff/ListBoxToolTip2.zip)