как редактировать колонку ListView?

Тема в разделе "WASM.WIN32", создана пользователем Quark, 27 ноя 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    почему-то у меня при нажатии мышкой на какой-нибудь элемент списка ListView всегда редактируется только нулевая колонка. как можно редактировать произвольную? при нажатии мышкой на любую колонку мессаги всегда приходят WM_NOTIFY LVN_BEGINLABELEDIT c NMLVDISPINFO.item.iSubItem равным 0. может быть я в свойствах окошка что-то не то указал?

    CHILD|VISIBLE|HSCROL|REPORT|SINGLESEL|SHOWSELALWAYS|EDITLABELS|ALIGNLEFT
    LVS_EX_FULLROWSELECT
     
  2. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Если не ошибаюсь, то напрямую в Listview - никак (исправьте меня, если я не прав). Как обычно это обходят: при щелчке мышью получить координаты и вычислить, ячейку, в которой надо заменять значение и ее координаты. После этого создать на месте ячейки текстбокс с текстом значения ячейки. После редактирования ячейки ее значение сохряняют в ListView.
     
  3. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    исходник "DataBook" ... немножко поупрощал, переделал коечто. посмотри, если хочешь

    masm32
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    https://wasm.ru/forum/viewtopic.php?id=10220
     
  5. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    driver, ты редактируешь строку целиком в отдельной форме. если я правильно понимаю автора топика, он хочет править данные в самом listview, причем кликами по этому контролу можно править только item'ы, но не subitem'ы. А примерчик все равно интересный. Когда-то я на vb6 делал записную книжку с treeview окно в стиле проводника и там использовал свой формат файла с разделителями - нулями и единицами (как у тебя).
     
  6. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Можно попробывать править и subitem
    При клике на subitem сохраняем значение item'а, кидаем туда значение (текущее) subitem'а, правим, и при окончании редактирования ставим все на свои места.
     
  7. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    по клику правой кнопки - определять координаты выделенного subitem-а и создавать эдиты на нём...

    а вот - как сделать, чтобы эдиты были сверху, даже если кликнуть по другому subitem-у? наверное надо сабклассировать листвьев и создавать эдиты в его обработчике...

    с кнопкой "ок" будет проблема - контексное меню ликвидировать, сделать тулбар из 4-х кнопок ...
     
  8. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    по клику правой кнопки - определять координаты выделенного subitem-а и создавать эдиты на нём...

    а вот - как сделать, чтобы эдиты были сверху, даже если кликнуть по другому subitem-у? наверное надо сабклассировать листвьев и создавать эдиты в его обработчике...

    с кнопкой "ок" будет проблема - контексное меню ликвидировать, сделать тулбар из 4-х кнопок ...
     
  9. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Я думаю, достаточно одного окна: его создавать CreateWindowEx при щелчках по субитему и показывать на первом плане (у дочерних контролов тоже есть z-order). Далее переводим фокус в этот EDIT, ждем ждем нажатия Enter, Esc или потери фокуса. В первом случае сохраняем результат, во втором и третьем случаях - нет. И во всех трех случаях удаляем EDIT после редактирования. Этот способ проверенно работает. Я делал такое с FlexGrid и EDIT на VB6 и все устраивало.
     
  10. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    в иходнике есть недоделка - нельзя отменить изминение айтема и восстановить прежнюю запись после начла редактирования,

    в "исходном" исходнике бсод ... брал его вроде здесь... не помню, наверное поэтому убрал кнопку "закрыть" у окна с эдитами