Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ListView Objekt

Empfohlene Antworten

Servus,

wie kann man listitems in einem Listview Objekt ausblenden?

MfG

Michael Klaus

Ich rate jetzt einfach mal (weiss es jetzt ehrlich nicht) aber ich würde Listview.Item.Visible oder Listview.Item.enabled mal probieren (falls es die Eigenschaften gibt, denke aber schon)

Könnte auch sein, das die Items ein Array sind, also Listview.Items[1].visible oder so

hi,

meines wissens nach geht das nicht (kann mich aber auch irren).

ich glaube mich zu erinnern, dass ich das problem mal hatte und mit folgender loesung zurechgekommen bin:

die hoehe der betroffenen zeile auf 0 setzen

dann darf der user allerding auch nicht die moeglichkeit haben, die zeilen-hoehe zu aendern (allowUserResize oder so aehnlich).

kann ich aber bei bedarf gerne noch mal nachsehen...

hoffe, geholfen zu haben.

Stimmt, hab gerade mal nachgesehen, gibt es nicht... es gibt allerdings die Eigenschaft ListView, darin steht das ListView in dem das ListItem angezeigt wird. Meine Idee wäre jetzt mal das auf nil zu setzen. Es geht dabei wie gesagt nur um die Anzeige, das ListItem bleibt erhalten...

Wieder nur eine Idee, hab ich nicht probiert...

die funktionen die Ihr beschrieben habt gibt es nicht.

die idee mit height=0 hatte ich auch schon, leider kommt dann bei mir immer die meldung "Eigenschaft ist Schreibgeschützt"

wie kann ich das ändern?

MfG

Michael Klaus

Ok, hab mal kurz was programmiert. Hier kannst du ein gewähltes ListItem "verstecken". Ist nur mal kurz als Beispiel gedacht, du müsstest es noch selber ausarbeiten...



type

  THiddenItems = Array of TListItem;


  TForm1 = class(TForm)

    ListView1: TListView;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    ImageList1: TImageList;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

  private

    { Private-Deklarationen }

    HiddenArray: THiddenItems;

  public

    { Public-Deklarationen }

  end;


var

  Form1: TForm1;


implementation


{$R *.DFM}


// ListItem hinzufügen

procedure TForm1.Button1Click(Sender: TObject);

begin

  with ListView1.Items.Add do

  begin

    ImageIndex:= ListView1.Items.Count;

    Caption:= 'Item'+ IntToStr(ListView1.Items.Count);

  end;

end;


// selektiertes ListItem verstecken

procedure TForm1.Button2Click(Sender: TObject);

begin

  SetLength(HiddenArray, Length(HiddenArray)+1);

  HiddenArray[High(HiddenArray)]:= TListItem.create(ListView1.Items); // Das Item muss ein

// TListItems als Parent haben, nil geht nicht (gibt Fehler beim Zugriff)


  HiddenArray[High(HiddenArray)].Caption:= ListView1.Selected.Caption;

  HiddenArray[High(HiddenArray)].ImageIndex:= ListView1.Selected.ImageIndex;



  ListView1.Selected.Delete;

end;



// ListItems wieder anzeigen

// Es werden allebisher "versteckten" angezeigt

// es müsste noch aus dem Array gelöscht werden

procedure TForm1.Button3Click(Sender: TObject);

var i: Integer;

    item: TListItem;

begin

  for i:= 0 to High(HiddenArray) do

  begin

    item:= ListView1.Items.Add;


    item.Caption:= HiddenArray[i].Caption;

    item.ImageIndex:= HiddenArray[i].ImageIndex;


  end;

end;


end.


Das mit dem Array ist nur ein Beispiel, wenn du nur ein bestimmtes Item verstecken willst kannst du das auch mit einer Variable o.ä. machen. auch evtl. mehr Werte als Caption und ImageIndex...

Hoffe es hilft...

P.S. Mir fällt gerade auf, ich hab vergessen am Ende aufzuräumen, du müsstest alle von dir Erzeugten ListItems auch wieder freigeben... sollte eigentlich klar sein.

Danke für die Antwort JesterDay, aber ich habe vergessen dazu zu sagen das ich in visual basic programmiere.

Hast du dazu ne lösung?

MfG

Mk

Nein, aber vom Prinzip her müsste es da genauso gehen...

hat jemand anders noch eine idee wie ich einzelne elemente eines listviews unter visual basic ausblenden kann oder wie ich die höhe der einzelnen zeilen ändere

mfg

michael klaus

hi,

ich habe mal nachgesehen, aber ich hatte das problem nicht bei einer listview sondern bei einem anderen control (spread). bei dem konnte man die zeilenhoehe festlegen...

allerding ist der ansatz von JesterDay ja nicht verkehrt...

du baust dir eine speicherstruktur (z.b. eine klasse mit den spalten der listview als eigenschaften oder ein array, oder ein type, ...) auf, in der du die elemente der listview ablegst. dabei sollte man die itemdata-eigenschaft der listitems (kann auch anders heissen) nutzen um diese in der speicherstruktur wiederzufinden.

dann gehst du mit einer schleife ueber alle element der listview und loeschst alle elemente, welche du nicht anzeigen moechtest. umgekehrt gehst du mit einer schleife ueber deine speichersturuktur und fuegst alle elemente wieder ein, welche du anzeigen moechtest.

den code dazu musst du aber schon selber schreiben... :-)

viel erfolg!

  • 2 Wochen später...

Der gedanke ist zwar nicht schlecht Peregrin, aber was machst du wenn in dem Listview 2000 bis 3000 einträge stehen und du dazu noch eine Array erzeugen musst.

Um das Listview zu durchsuchen und das Array zuschreiben braucht der Rechner zu viel zeit.

Damit ist kein flüssiges Arbeiten mehr möglich.

need support - help me

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.