| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: ListView / doppelte Einträge löschen (3393 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: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
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: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
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 |