Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  Selection in ListView verhindern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Selection in ListView verhindern (3781 mal gelesen)
jkaestle
Mitglied



Sehen Sie sich das Profil von jkaestle an!   Senden Sie eine Private Message an jkaestle  Schreiben Sie einen Gästebucheintrag für jkaestle

Beiträge: 1091
Registriert: 08.02.2002

VB 2008 Express
Win 7 Prof.

erstellt am: 28. Jul. 2010 19:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von mseufert an!   Senden Sie eine Private Message an mseufert  Schreiben Sie einen Gästebucheintrag für mseufert

Beiträge: 2624
Registriert: 18.10.2005

erstellt am: 29. Jul. 2010 07:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jkaestle 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von jkaestle an!   Senden Sie eine Private Message an jkaestle  Schreiben Sie einen Gästebucheintrag für jkaestle

Beiträge: 1091
Registriert: 08.02.2002

VB 2008 Express
Win 7 Prof.

erstellt am: 29. Jul. 2010 18:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von jkaestle an!   Senden Sie eine Private Message an jkaestle  Schreiben Sie einen Gästebucheintrag für jkaestle

Beiträge: 1091
Registriert: 08.02.2002

VB 2008 Express
Win 7 Prof.

erstellt am: 29. Jul. 2010 21:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von mseufert an!   Senden Sie eine Private Message an mseufert  Schreiben Sie einen Gästebucheintrag für mseufert

Beiträge: 2624
Registriert: 18.10.2005

erstellt am: 30. Jul. 2010 07:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jkaestle 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von jkaestle an!   Senden Sie eine Private Message an jkaestle  Schreiben Sie einen Gästebucheintrag für jkaestle

Beiträge: 1091
Registriert: 08.02.2002

VB 2008 Express
Win 7 Prof.

erstellt am: 31. Jul. 2010 21:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von mseufert an!   Senden Sie eine Private Message an mseufert  Schreiben Sie einen Gästebucheintrag für mseufert

Beiträge: 2624
Registriert: 18.10.2005

erstellt am: 01. Aug. 2010 08:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für jkaestle 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von jkaestle:
Vielen Dank nochmals.

... keine Ursache ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz