| |
| MDG Engineering Nutzt Xometry, Um Medizinische Geräte Zu Bauen Und Das Globale Wachstum Voranzutreiben, ein Anwenderbericht
|
Autor
|
Thema: ListView / doppelte Einträge löschen (3173 mal gelesen)
|
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 04. Aug. 2012 11:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich habe ein ListView im Einsatz, in dem die 1. Spalte eine CheckBox ist und in der 2. Spalte ein Name geladen wird. Nun kann es sein, dass der Name z.B. Schulze mehrfach im ListView erfasst wird. Dieser Name soll aber nur einmal im ListView erscheinen, also alle weiteren Schulze gelöscht oder erst gar nicht erfasst werden. Leider komme ich hier nicht weiter. Alles was ich bislang probiert habe, wurden mir dann alle Schulze gelöscht. Code:
Dim ObjEnt As AcadEntity Dim i As Long For Each ObjEnt In LaSet Set LItem = ListView1.ListItems.Add() LItem.Text = "" LItem.SubItems(1) = ObjEnt.Layer With ListView1.ListItems 'i = i + 1 For i = 1 To .Count If .Item(i).SubItems(1) = LItem.SubItems(1) Then Else i = i + 1 ListView1.ListItems.Remove i End If Next i End With Next
Kann mir da jemand weiter helfen Vielen Dank im voraus. ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 04. Aug. 2012 20:40 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, Warum prüfst du denn nicht bei befüllen des Listviews ob der Eintrag schon vorhanden ist?! Je nach dem wieviele Einträge du zu prüfen hast könnte das die einfachst Lösung sein. Ansonsten kommen da noch andere Fragen: Wo kommen die Daten her (SQL-Tabelle?!). Soll das noch sortiert werden usw. Gruß, Carsten [Diese Nachricht wurde von Carsten1210 am 04. Aug. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 06. Aug. 2012 08:56 <-- editieren / zitieren --> Unities abgeben:
Moin Carsten! Genau genommen geht es mir um folgendes. Ich definiere mir über 2 Klicks ein Feld, aus dem alle Objektlayer ermittelt werden sollen. Diese werden in einem Auswahlsatz gespeichert. Anschließend wird der Auswahlsatz durchlaufen und die Objektlayernamen in das ListView geschrieben. Die erste Spalte des Listview bekommt eine CheckBox. Der Name erscheint in der zweiten Spalte. Wie müßte die Abfrage beim befüllen des ListViews den lauten? Ich bekomme es einfach nicht hin Egal, was ich bislang probiert habe, erscheinen wieder alle Namen,oder keiner. Code:
Dim ObjEnt As AcadEntity Dim OK As Boolean OK = TrueFor Each ObjEnt In LaSet OK = True Set LItem = ListView1.ListItems.Add() LItem.Text = "" LItem.SubItems(1) = ObjEnt.Layer If LItem.SubItems(1) = ObjEnt.Layer Then OK = False Exit For ElseIf OK = True Then LItem.Text = "" LItem.SubItems(1) = ObjEnt.Layer End If Next
Wie müßte es denn genau lauten? ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 06. Aug. 2012 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hi Dirk, Du musst vor dem AddItem die Auflistung in deinem Listview durchlaufen und prüfen ob der Eitnrag vorhanden ist. Davon ist dann abhängig ob du den Eintrag hinzufügen musst oder nicht. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 06. Aug. 2012 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für Dirk.B
Hallo Dirk, ich möchte dir ja nicht zu nahe treten, aber ich verstehe den code nicht mal. Für mich sieht das komplett unlögisch aus. Vor allem, wenn ich vor der If-Abfrage die beiden Inhalte gleichsetze, kann ich mir die Abfrage sparen. Wenn, würde ich das eher so machen...
Code:
Public Function CheckData(Blah as string)as Boolean Dim i as Interger For i = 1 to ListView.Count if ListView.Item(i) = Blah then return true end if Next return false end Function
Wenn False zurückgegeben wird, einfügen bei True nicht. Total simple. Das geht bestimmt auch noch eleganter, aber ich habe jetzt einfach mal einen Gedankenansatz heruntergetippt. Jenachdem, welches Objekt du tatsächlich verwendest, müsstest du den Code natürlich noch anpassen. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dirk.B Mitglied Tischler / Leiter Arbeitsvorbereitung
Beiträge: 534 Registriert: 25.11.2003
|
erstellt am: 12. Aug. 2012 14:54 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Vielen Dank noch mal. So funktioniert es nun prima. Code:
Dim ObjEnt As AcadEntity Dim colTemp As New Collection Dim i As LongOn Error Resume Next For Each ObjEnt In LaSet colTemp.Add ObjEnt.Layer, ObjEnt.Layer 'Namenseintrag und Namensindex vom Typ String Next On Error GoTo 0 With ListView1.ListItems For i = 1 To colTemp.Count Set LItem = .Add() LItem.Text = "" LItem.SubItems(1) = colTemp(i) 'einmaligen Namenseintrag übernehmen Next i End With
Gruß Dirk ------------------ Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |