<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CListCtrl markierte Zeilen löschen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lösche mit Entf markierte Zeilen aus einer ListCtrl. Wenn ich eine Zeile markiert habe klappt das auch wunderbar. Nur bei der Selektion mehrerer Zeilen werden nicht alle gelöscht. Je mehr markiert, je mehr bleiben übrig - aber ohne allgemeines Prinzip.</p>
<pre><code class="language-cpp">void CDMView::OnLvnKeydownHistorie(NMHDR *pNMHDR, LRESULT *pResult)
{
    TRACE0(&quot;Keypress in Historie&quot;);
    LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast&lt;LPNMLVKEYDOWN&gt;(pNMHDR);
    // wenn Entf gedrück wurde markierte Elemente löschen
    if (pLVKeyDow-&gt;wVKey == VK_DELETE)
    {
        TRACE0(&quot;Keypress in Historie: ENTF&quot;);
        // Zeiger auf Historie (CListCtrl) holen
        CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_HISTORIE);
        // erstes selektiertes Element
        POSITION pos = pList-&gt;GetFirstSelectedItemPosition();
        // solange noch selektierte Elemente
        while (pos)
        {
            // nächstes Element
            int nItem = pList-&gt;GetNextSelectedItem(pos);
            TRACE1(&quot;Item %d was selected!\n&quot;, nItem);
            // ermittle die Nummer für die Historie (Datenklasse)
            int nItemH = atoi(pList-&gt;GetItemText(nItem, 0));
            // Lösche markiertes Zeile (CListCtrl)
            pList-&gt;DeleteItem(nItem);
            // lösche das Element aus der Historie (Datenklasse)
            GetDocument()-&gt;GetHistorie()-&gt;DeleteValue(nItemH);
        }
    }

    *pResult = 0;
}
</code></pre>
<p>Wer kann mir helfen?<br />
Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/6338/clistctrl-markierte-zeilen-löschen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 15:25:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6338.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jun 2003 07:19:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 07:19:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lösche mit Entf markierte Zeilen aus einer ListCtrl. Wenn ich eine Zeile markiert habe klappt das auch wunderbar. Nur bei der Selektion mehrerer Zeilen werden nicht alle gelöscht. Je mehr markiert, je mehr bleiben übrig - aber ohne allgemeines Prinzip.</p>
<pre><code class="language-cpp">void CDMView::OnLvnKeydownHistorie(NMHDR *pNMHDR, LRESULT *pResult)
{
    TRACE0(&quot;Keypress in Historie&quot;);
    LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast&lt;LPNMLVKEYDOWN&gt;(pNMHDR);
    // wenn Entf gedrück wurde markierte Elemente löschen
    if (pLVKeyDow-&gt;wVKey == VK_DELETE)
    {
        TRACE0(&quot;Keypress in Historie: ENTF&quot;);
        // Zeiger auf Historie (CListCtrl) holen
        CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_HISTORIE);
        // erstes selektiertes Element
        POSITION pos = pList-&gt;GetFirstSelectedItemPosition();
        // solange noch selektierte Elemente
        while (pos)
        {
            // nächstes Element
            int nItem = pList-&gt;GetNextSelectedItem(pos);
            TRACE1(&quot;Item %d was selected!\n&quot;, nItem);
            // ermittle die Nummer für die Historie (Datenklasse)
            int nItemH = atoi(pList-&gt;GetItemText(nItem, 0));
            // Lösche markiertes Zeile (CListCtrl)
            pList-&gt;DeleteItem(nItem);
            // lösche das Element aus der Historie (Datenklasse)
            GetDocument()-&gt;GetHistorie()-&gt;DeleteValue(nItemH);
        }
    }

    *pResult = 0;
}
</code></pre>
<p>Wer kann mir helfen?<br />
Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30726</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 25 Jun 2003 07:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 07:24:00 GMT]]></title><description><![CDATA[<p>So lösche ich die selektierten Items aus einer Liste</p>
<pre><code class="language-cpp">if(AfxMessageBox(&quot;Die gewählten Einträge löschen?&quot;,MB_YESNO)==IDYES)
    {
        CListCtrl l;
        CListCtrl * a;
        LVITEM lv;
        lv.mask =LVIF_STATE;
        lv.stateMask = LVIS_SELECTED;
        a = (CListCtrl *) l.FromHandle(active);
        while(a-&gt;GetSelectedCount() &gt; 0)
        {
            for(int x = 0;x &lt;=a-&gt;GetItemCount();x++)
            {
                lv.iItem = x;
                a-&gt;GetItem(&amp;lv);
                if(lv.state == LVIS_SELECTED)
                {
                    a-&gt;DeleteItem(x);
                }
            }           
        }
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/30727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30727</guid><dc:creator><![CDATA[Andorxor]]></dc:creator><pubDate>Wed, 25 Jun 2003 07:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 08:11:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1254">@Andorxor</a><br />
Oje, ne ineinandergeschachtelte Schleife für ein simples lineares Problem?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3260">@MuehBln</a><br />
Schon nicht schlecht, allerdings hast Du vergessen, dass du das Item an Position N löschst und danach aufgrund von GetNextSelectedItem mit N+2 weiteriterierst. Also wird Item N+1 einfach im Text übergangen.</p>
<p>Also folgt:</p>
<pre><code class="language-cpp">// solange noch selektierte Elemente
for( int nItem=0; nItem=pList-&gt;GetNextItem( nItem, LVNI_SELECTED)!=-1; )
{
  // nächstes Element
  TRACE1(&quot;Item %d was selected!\n&quot;, nItem);
  // ermittle die Nummer für die Historie (Datenklasse)
  int nItemH = atoi(pList-&gt;GetItemText(nItem, 0));
  // Lösche markiertes Zeile (CListCtrl)
  pList-&gt;DeleteItem( nItem);
  // lösche das Element aus der Historie (Datenklasse)
  GetDocument()-&gt;GetHistorie()-&gt;DeleteValue(nItemH);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/30728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30728</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 25 Jun 2003 08:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 12:21:00 GMT]]></title><description><![CDATA[<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30729</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 25 Jun 2003 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 13:07:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/638">@RenéG</a></p>
<p>leider klappt Deine Funktion nicht. Egal was ich markiere, werden jetzt alle Elemente bis auf das 1 und das letzte gelöscht. Das letzte kann ich danach noch separat markieren und löschen. Aber das Oberste geht gar nicht zu löschen.</p>
<p>Kannst Du mir nochmal helfen?<br />
Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30730</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 25 Jun 2003 13:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 13:22:00 GMT]]></title><description><![CDATA[<p>'tschuldigung, hab die Klammern vergessen, so isses richtig:</p>
<pre><code class="language-cpp">for( int nItem=0; (nItem=pList-&gt;GetNextItem( nItem, LVNI_SELECTED))!=-1; )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/30731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30731</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 25 Jun 2003 13:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 13:41:00 GMT]]></title><description><![CDATA[<p>klappt leider immer noch nicht. Bin schon mit dem Debugger durch seh den Fehler aber nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Also das sieht ja vollkommen logisch und elegant aus - aber er löscht nicht alle gewählten Elemente. Wähle ich einzelne Zeilen die nicht direkt übereinander liegen oder eine einzelne Zeile wähle klappts.<br />
Aber wenn ich einen ganzen Block wähle, löscht er nicht alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30732</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 25 Jun 2003 13:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 13:51:00 GMT]]></title><description><![CDATA[<p>Bei mir gehts!<br />
Ähm, hast Du vielleicht LVS_ICON oder LVS_SMALLICON eingestellt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30733</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 25 Jun 2003 13:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 14:02:00 GMT]]></title><description><![CDATA[<p>Nein, hab bei Ansicht Bericht zu stehen.</p>
<p>Ich füge die Elemente mit:</p>
<pre><code class="language-cpp">int pos = m_Historie.InsertItem(LVIF_TEXT|LVIF_STATE,
                val-&gt;GetID(),
                val-&gt;GetIDString(),
                0,
                LVIS_SELECTED, 0, 0);
</code></pre>
<p>liegts am LVIS_SELECTED?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30734</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 25 Jun 2003 14:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Wed, 25 Jun 2003 14:41:00 GMT]]></title><description><![CDATA[<p>Ich hab MFC7, da gibts die Funktion mit so vielen Parametern gar net! Was bedeuten die?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30735</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 25 Jun 2003 14:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 06:04:00 GMT]]></title><description><![CDATA[<p>Hi René,</p>
<p>ich benutze auch MFC7 (also, wenn Du damit <a href="http://VS.NET" rel="nofollow">VS.NET</a> meinst)<br />
und diese Funktion habe ich aus der MSDN....</p>
<pre><code class="language-cpp">InsertItem(UINT nMask, 
           int nItem, 
           LPCSTR lpszItem, 
           UINT nState, 
           UINT nStateMask,
           nImage, LPARAM lParam)
</code></pre>
<p>Sollte ich eine Alternative zum Einfügen neuer Elemente benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30736</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Thu, 26 Jun 2003 06:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 06:37:00 GMT]]></title><description><![CDATA[<p>Da Du beim State des Items 0 angibst, heisst es, dass das Item unselektiert eingefügt wird, damit kannst Du dann gleich die Funktion<br />
int InsertItem( int nItem, LPCTSTR lpszItem);<br />
benutzen.</p>
<p>Allerdings frage ich mich, was Deine Funktion 'val-&gt;GetID()' macht.<br />
Wenn z.B. GetID Deines 1. Items 10 zurückgibt, wohin soll dann InsertItem das Item einfügen, wenn es Index 0..9 noch gar nicht gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30737</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Thu, 26 Jun 2003 06:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 06:46:00 GMT]]></title><description><![CDATA[<p>ich benötige eine laufende Nummer für die Values (val-&gt;GetID()). Da beim Löschen von Elementen trotzdem weiter hochgezählt werden muss, kann ich also den CArray-Index nicht benutzen. Deshalb diese ID.</p>
<p>Dein geschilderter Fall mit den Indexen tritt ganz sicher in der Konstellation auf.<br />
Spielt der Wert des nItem überhaupt eine Rolle? InsertItem fügt doch den Wert eh sortiert an einer ganz anderen Stelle ein und gibt mir eine ganz andere Einfügeposition zurück.<br />
Oder versteh ich da prinzipiell was falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30738</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Thu, 26 Jun 2003 06:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 07:02:00 GMT]]></title><description><![CDATA[<p>Du brauchst ihn wenn du die Liste sortieren willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30739</guid><dc:creator><![CDATA[Andorxor]]></dc:creator><pubDate>Thu, 26 Jun 2003 07:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 07:06:00 GMT]]></title><description><![CDATA[<p>Ups <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Es ist natürlich so, dass GetNextItem schon aufgrund des Namens das aktuell übergebene Item gar nicht mehr überprüft.<br />
Demzufolge also so:</p>
<pre><code class="language-cpp">for( int nItem=-1; (nItem=pList-&gt;GetNextItem( nItem, LVNI_SELECTED))!=-1; nItem--)
</code></pre>
<p>Man man man, die Hitze macht mir wirklich zu schaffen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/30740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30740</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Thu, 26 Jun 2003 07:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to CListCtrl markierte Zeilen löschen on Thu, 26 Jun 2003 07:16:00 GMT]]></title><description><![CDATA[<p>Hier ist's gar nicht so warm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wunderbar!!! Klappt jetzt supi!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Dankeschön für Deine Geduld!</p>
<p>Gruß<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30741</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Thu, 26 Jun 2003 07:16:00 GMT</pubDate></item></channel></rss>