ListView Subitems werden nur einmal angezeigt



  • Tag allerseits,

    in einer Software kommt u. a. ein ListView fuer eine Userliste zum Einsatz.

    Die ListView ist in 4 Spalten eingeteilt. In der ersten Spalte wird ein
    Icon, in der zweiten der Username und in den restlichen wieder Icons angezeigt.

    Nun habe ich das Problem, dass beim Hinzufuegen eines Users dieser nur einmal
    angezeigt wird. Loesche ich ihn und fuege in erneut hinzu, so wird nur noch
    das Icon in der ersten Spalte angezeigt, die restlichen Spalten sind alle
    leer. Woran kann das liegen?

    Etwas code:

    int ListView::add_item(int col, int row, wchar_t* text, bool use_user_data, LPARAM user_data) {
     LVITEM lvItem;
     memset(&lvItem, 0, sizeof(LVITEM));
     lvItem.mask = LVIF_TEXT | LVIF_PARAM;
     lvItem.iItem = row; 
     lvItem.iSubItem = col;
     lvItem.iImage = -1;
     if(use_user_data) {
      lvItem.lParam = user_data;
     }
     if(text)
     lvItem.pszText = text;
     return ListView_InsertItem(hwnd(), &lvItem);
    }
    
    bool ListView::add_subitem(int col, int row, wchar_t* text) {
     LVITEM item;
     memset(&item, 0, sizeof(LVITEM));
     item.mask = LVIF_TEXT;
     item.iItem = row;
     item.iSubItem = col;
     item.pszText = text;
     item.iImage = -1;
     return ListView_SetItem(hwnd(), &item);
    }
    
    bool ListView::add_subitem_image(int col, int row, int img_idx) {
     LVITEM item;
     memset(&item, 0, sizeof(LVITEM));
     item.mask = LVIF_IMAGE;
     item.iItem = row;
     item.iSubItem = col;
     item.iImage = img_idx;
     return ListView_SetItem(hwnd(), &item);
    }
    

    Ist an dem Code irgendwas falsch? Muss ich noch etwas besonderes beachten?

    Woran koennte es sonst noch liegen?

    gruss
    v R



  • Column 0  | Column 1  | Column 2  | Column 3  | 
    ----------+-----------+-----------+-----------+
    Item(0)   | SubItem(1)| SubItem(2)| SubItem(3)|
    SubItem(0)|           |           |           |
    ----------+-----------+-----------+-----------+
    Item(1)   | SubItem(1)| SubItem(2)| SubItem(3)|
    SubItem(0)|           |           |           |
    ----------+-----------+-----------+-----------+
    Item(2)   | SubItem(1)| SubItem(2)| SubItem(3)|
    SubItem(0)|           |           |           |
    
    ...
    

    Ist bei deinem Item das du zuerst immer einfügst lvi.SubItem auch immer 0 ?
    die drauf einzu fügenden SubItems müssten dann
    lvi.SubItem = 1: für die zweite Spalte,
    lvi.SubItem = 2: für die dritte Spalte,
    lvi.SubItem = 3: für die vierte Spalte,
    sein.

    Gruß Tobi.



  • Hallo,

    ja das ist es. Ein Kumpel von mir hat eben den Bug schon gefunden, trotzdem
    danke fuer die Antwort.

    gruss
    v R



  • Bug 😃

    Gruß Tobi.


Anmelden zum Antworten