почему-то у меня при нажатии мышкой на какой-нибудь элемент списка ListView всегда редактируется только нулевая колонка. как можно редактировать произвольную? при нажатии мышкой на любую колонку мессаги всегда приходят WM_NOTIFY LVN_BEGINLABELEDIT c NMLVDISPINFO.item.iSubItem равным 0. может быть я в свойствах окошка что-то не то указал? CHILD|VISIBLE|HSCROL|REPORT|SINGLESEL|SHOWSELALWAYS|EDITLABELS|ALIGNLEFT LVS_EX_FULLROWSELECT
Если не ошибаюсь, то напрямую в Listview - никак (исправьте меня, если я не прав). Как обычно это обходят: при щелчке мышью получить координаты и вычислить, ячейку, в которой надо заменять значение и ее координаты. После этого создать на месте ячейки текстбокс с текстом значения ячейки. После редактирования ячейки ее значение сохряняют в ListView.
driver, ты редактируешь строку целиком в отдельной форме. если я правильно понимаю автора топика, он хочет править данные в самом listview, причем кликами по этому контролу можно править только item'ы, но не subitem'ы. А примерчик все равно интересный. Когда-то я на vb6 делал записную книжку с treeview окно в стиле проводника и там использовал свой формат файла с разделителями - нулями и единицами (как у тебя).
Можно попробывать править и subitem При клике на subitem сохраняем значение item'а, кидаем туда значение (текущее) subitem'а, правим, и при окончании редактирования ставим все на свои места.
по клику правой кнопки - определять координаты выделенного subitem-а и создавать эдиты на нём... а вот - как сделать, чтобы эдиты были сверху, даже если кликнуть по другому subitem-у? наверное надо сабклассировать листвьев и создавать эдиты в его обработчике... с кнопкой "ок" будет проблема - контексное меню ликвидировать, сделать тулбар из 4-х кнопок ...
по клику правой кнопки - определять координаты выделенного subitem-а и создавать эдиты на нём... а вот - как сделать, чтобы эдиты были сверху, даже если кликнуть по другому subitem-у? наверное надо сабклассировать листвьев и создавать эдиты в его обработчике... с кнопкой "ок" будет проблема - контексное меню ликвидировать, сделать тулбар из 4-х кнопок ...
Я думаю, достаточно одного окна: его создавать CreateWindowEx при щелчках по субитему и показывать на первом плане (у дочерних контролов тоже есть z-order). Далее переводим фокус в этот EDIT, ждем ждем нажатия Enter, Esc или потери фокуса. В первом случае сохраняем результат, во втором и третьем случаях - нет. И во всех трех случаях удаляем EDIT после редактирования. Этот способ проверенно работает. Я делал такое с FlexGrid и EDIT на VB6 и все устраивало.
в иходнике есть недоделка - нельзя отменить изминение айтема и восстановить прежнюю запись после начла редактирования, в "исходном" исходнике бсод ... брал его вроде здесь... не помню, наверное поэтому убрал кнопку "закрыть" у окна с эдитами