| | | Xometry ermöglicht JTW Astronomy die Herstellung hochwertiger Trident Teleskophalterungen, ein Anwenderbericht
|
Autor
|
Thema: Selection in ListView verhindern (3853 mal gelesen)
|
jkaestle Mitglied
Beiträge: 1091 Registriert: 08.02.2002 VB 2008 Express Win 7 Prof.
|
erstellt am: 28. Jul. 2010 19:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich schreibe gerade einkleines Programm mit VB 2008 und habe eine ListView. Nun habe ich meiner ListView ein Kontextmenü hinzugefügt, das auch alles soweit funktioniert. Das nervige ist nur, dass wenn ich das Kontextmenü über die rechte Maustaste aufrufe, das darunterliegende ListViewItem selektiert und das Ereignis SelectedIndexChanged ausgelöst und verarbeitet wird. Ich habe schon einiges versucht, bekomme es aber nicht hin, dass das ListViewItem nur bei Klick mit der linken Maustaste selektiert wird. Kennt jemand eine Lösung für das Problem? Bin für jeden Tipp dankbar. ------------------ Viele Grüße Jochen Kästle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Ehrenmitglied V.I.P. h.c. Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005
|
erstellt am: 29. Jul. 2010 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für jkaestle
Hallo Jochen, möglicherweise hilft's, den EventHandler ( ... Handles Listview1.SelectedIndexChanged) gezielt mit AddHandler/RemoveHandler zu aktivieren/deaktivieren. Andere Idee: Mal nachsehen, ob's ein Property etc. gibt, das Dir anzeigt, welcher Button im Listview gedrückt wurde. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jkaestle Mitglied
Beiträge: 1091 Registriert: 08.02.2002 VB 2008 Express Win 7 Prof.
|
erstellt am: 29. Jul. 2010 18:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, danke für den Tipp. Das mit Add/Remove Handler funktioniert nicht ganz. Damit verhindere ich nur, dass der Code für die Eventverarbeitung nicht ausgeführt wird. Das Element wird trotzdem selektiert. Meine nächste Idee war, die ListView ganz zu deaktivieren durch die rechte Maustaste, und wenn das Kontextmenü geschlossen ist (ContextMenu.Closed) die ListView wieder zu aktiviren. Hat auch nicht funktioniert. Offenbar wird das Listenelement erst selektiert, und dann erst wird die Maus behandelt. Inzwischen habe ich im Internet gefunden, dass es ein ListView.SelectedIndexChanging Event gibt, das ausgelöst wird bevor das Item selektiert wird. Nur steht mir das nicht zur Verfügung. Jetzt mache ich mich auf die Suche woran das liegt. ------------------ Viele Grüße Jochen Kästle [Diese Nachricht wurde von jkaestle am 29. Jul. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jkaestle Mitglied
Beiträge: 1091 Registriert: 08.02.2002 VB 2008 Express Win 7 Prof.
|
erstellt am: 29. Jul. 2010 21:31 <-- editieren / zitieren --> Unities abgeben:
So, bin ein Stück weiter: Also das mit dem SelectedIndexChangin war auch nix. Das ist in einer Klassenbibliothek für Web-Anwendungen. Nach der Einbindung hat's mir meine ListView-Definitionen zerschossen. Hab's jetzt doch mit Remove- und AddHandler gelöst. Ich frage die mittlere Maustaste ab, setze ListView.HideSelection=False, nehme den Handler Weg, deaktiviere die Listview. Damit sieht man nicht mehr, dass was anderes selektiert ist. Beim ContextMenu.Opening aktiviere ich aus optischen Gründen die ListView wieder und bei ContextMenu.Close wird das alte Element wieder selektiert, es kommt der Handler wieder hinzu und HideSelection wird wieder auf True gesetzt. Was für ein K(r)ampf. Vielleicht weiss ja jemand noch was besseres. ------------------ Viele Grüße Jochen Kästle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Ehrenmitglied V.I.P. h.c. Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005
|
erstellt am: 30. Jul. 2010 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für jkaestle
Hallo Jochen, Plan B, siehe oben, hab' ich mal versucht, das funktioniert prima. Es gibt ein Property "MouseButtons", das Dir sagt, welche Taste gedrückt wurde. Also einfach innerhalb des EventHandlers abfragen und wenn's die rechte war, ein Exit Sub folgen lassen: Code: If control.mousebuttons = windows.forms.mousebuttons.right then exit sub
Jetzt kann noch stören, daß der EventHandler i.d.R. zwei mal angestossen wird. Erst wird die Selektion zurückgesetzt, dann erst ein/mehrere Items wieder selektiert. Über ListView.selectedItems.count kannst Du das feststellen und für den Fall, daß gerade kein Item selektiert ist, die Sub verlassen. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jkaestle Mitglied
Beiträge: 1091 Registriert: 08.02.2002 VB 2008 Express Win 7 Prof.
|
erstellt am: 31. Jul. 2010 21:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, habe mich jetzt nochmals hingesetzt und durchgetestet. Der Tipp war gut. Musste zwar den Code noch etwas ergänzen, jetzt klappts aber wie gewünscht: __________________________________________________________________________ If Control.MouseButtons = MouseButtons.Right Then For z = 0 To ListView1.Items.Count - 1 If z <> curTrk And ListView1.Items.Item(z).Selected = True Then ListView1.Items.Item(z).Selected = False ListView1.Items.Item(curTrk).Selected = True End If Next Exit Sub End If ___________________________________________________________________________ Das Problem war nach wie vor, dass zwar der Code für die Neuselektion nicht ausgeführt wird, aber das unter dem Mauszeiger liegende Element trotzdem als selektiert angezeigt wird. curTrk ist der Index des ListViewItems das vor dem Mausklick selektiert ist. Das neu selektierte wird deselektiert und das alte wieder selektiert. Um nicht in einer Endlosschleife zu landen passiert das nur, wenn die Indize von Alt- und Neuselektiertem nicht identisch sind. Bei den Checkboxen der ListView war es etwas komplizierter, weil die etwas anders funktionieren. Da musste ich mit RemoveHandler arbeiten um nicht in einer Endlosschleife zu landen. Vielen Dank nochmals. ------------------ Viele Grüße Jochen Kästle
[Diese Nachricht wurde von jkaestle am 31. Jul. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mseufert Ehrenmitglied V.I.P. h.c. Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005
|
erstellt am: 01. Aug. 2010 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für jkaestle
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|