Zum Inhalt springen

ListCtrl - Indentlevel auslesen


Gast JulianB

Empfohlene Beiträge

Hallo zusammen,

ich habe mal eine Frage. Wie kann ich die Parameter eines Items aus einem ListCtrl wieder auslesen.

Also zum Beispiel, ich setze ein Item in das ListCtrl:


LV_ITEM Item;


	Item.lParam	= (LPARAM) pItem;

	Item.pszText    = LPSTR_TEXTCALLBACK;

	Item.mask	= LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE | LVIF_INDENT;

	Item.iItem	= nInsertPos;

	Item.iImage	= I_IMAGECALLBACK;

	Item.iSubItem	= 0;

	Item.iIndent	= I_INDENTCALLBACK;

Jetzt möchte ich, zum Beispiel bei Doppelklick auf ein bestimmten Eintrag im ListCtrl, das Indentlevel des selektierten Eintrages bekommen, wie geht das? Also: Doppelklick auf Eintrag (wie ich das realisiere weiß ich) und dann Werte des Items abfragen.

LV_ITEM iItem = ListCtrl.GetItem(nPos);


if(iItem.iIndent = 1)

{MessageBox("Indentlevel beträgt 1");}

Irgendwie sowas, den Befehl "GetItem" gibt es natürlich nicht, das ist nur der den ich Suche ;-)

Ist das realisierbar? Gibt es da irgendeinen Befehl oder muss ich selber bauen?

Liebe Grüße,

Julian

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Hallo,

das Thema hat sich evtl. erledigt, aber ich würde gern mehr über die Funktion erfahren die du suchst!

Der Parameter iIndent, für was ist der gut, ich hab den noch nie benutzt!

Ich selber benutze schon GetItem(LVITEM *item); , oder GetItemText(....) aber nur um die lesbaren Daten zu ermitteln! :rolleyes:

Grüsse

break;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Break,

Der iIndentwert wird gesetzt ( 0 oder 1 ) um in einem LictCtrl in Reportansicht eine Einrückung zu erzwingen.

Also als Beispiel:

Liste:

Eintrag1-Indent=0

--Eintrag2-Indent=1

--Eintrag3-Indent=1

--Eintrag4-Indent=1

--Eintrag5-Indent=1

Eintrag6-Indent=0

Eintrag7-Indent=0

Das ist ganz praktisch wenn du zum Beispiel eine Ordneransicht hast und den Inhalt mit Doppelklick expandieren willst ohne die Ansicht komplett neu zu laden, dann fügst du einfach die neuen Einträge mit einem iIndent=1 hinzu.

Ich brauchte diese Funktion, da ich einen Button in meinem Dialog habe, der es mir ermöglicht mit einem Klick alle expandierten Einträge aus dem ListCtrl wieder "einzuklappen", deswegen habe ich nach einer Funktion gesucht die mir den Indentlevel zurück gibt.

Ich hoffe das erklärt ein wenig wozu dieser Parameter gut ist, wenn nicht frag ruhig.

Liebe Grüße, ein frohes Fest und guten Rutsch,

Julian

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Julian,

wenn es das ist was ich meine, dann brauche ich das auch, funktioniert es bei dir?

Also, wenn du Einträge mit iIndent einfügst, dann verhalten die sich als ob du eine Liste mit '+' hast, oder?

Bsp.:

// ausgeklappt:

- Item mit iIndent 0

-- Item mit iIndent 1

-- Item mit iIndent 1

-- Item mit iIndent 1

// alle eingeklapt:

+Item mit iIndent 0

Ist das so richtig(irgend wie werden bei mir keine Einrückungen erzwungen)?

LG

break

Bearbeitet von break
Link zu diesem Kommentar
Auf anderen Seiten teilen

Richtig,

bei einem gesetzten Indentlevel 1 wird das Item im ListCtrl eingerückt angezeigt. Dazu musst du eigentlich nur bei der Eigenschaftszuweisung des Itrems die richtigen Werte setzen:


LV_ITEM Item;


	Item.lParam	= (LPARAM) pItem;

	Item.pszText    = LPSTR_TEXTCALLBACK;

	Item.mask	= LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE | [B]LVIF_INDENT[/B];

	Item.iItem	= nInsertPos;

	Item.iSubItem	= 0;

	Item.iIndent	= [B]1 oder 0[/B];

Danach das Item hinzufügen und die Einrückung müsste geschehen sein, wenn nicht dann poste einfach mal deinen Quellcode ich schaue mir das dann mal an.

Natürlich musst du jedem Item das korrekte Indentlevel hinzufügen. Wenn du dein selektiertes Objekt expandierst, dann müssen die nun sichtbaren Items alle ein Indent = 1 bekommen.

LG

Bearbeitet von JulianB
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

hmm, geht nicht ohne hilfe :(

Also hier ist mein Beispielcode:


LV_ITEM Item;

Item.mask = LVIF_TEXT | LVIF_INDENT;

Item.iIndent = 0;

Item.iItem = 0; // erstes item

Item.iSubItem = 0;

Item.pszText = "Erster";

m_cListCtrl.InsertItem(&Item);

// für 2 einrückende items:

Item.iIndent = 1; // einrücken

Item.iItem = 1; // nächter in der Liste

Item.iSubItem = 0;

Item.pszText = "Zweiter";

m_cListCtrl.InsertItem(&Item);


Item.iIndent = 1; // einrücken

Item.iItem = 2; // nächter in der Liste

Item.iSubItem = 0;

Item.pszText = "Dritter";

m_cListCtrl.InsertItem(&Item);

// usw.

Mir fällt auf das ich nicht den Wert für lParam gesetzt habe, ich weiß auch

nicht woher kommt bei dir pItem? Ist dass das Item was du setzen möchtest

hier als Parameter übergeben?

Das hier:

Item.lParam = (LPARAM) pItem; // pItem??

Danke für deine Hilfe!

break;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...