|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Как лучше реализовать Add/Remove Columns на Listview? Видится 2 пути: 1) ListBox "Настройка полей" с галочками(видим/невидим) и кнопками вверх/вниз 2) Два listbox (1:Available columns 2:Displayed columns+move up+move down) с кнопками Add/Remove посредине. Второй вариант видится красивше. Сложность вижу такую: Я хочу все поля хранить в Listbox (т.к. на основании одних, возм. скрытых элементов, могут вычисляться значения других, например индекс иконки в строке, или разрешаться/запрещаться какие-то действия). Я не хочу давать возможность раздвигать мышью скрытые поля (где width=0) Причем если вариант (1) c возможностью "раздвигать" еще куда ни шло, то если двигаться по варианту (2), то будет бардак, т.к. в первом случае последовательность полей (и видимых и невидимых) задана, и она одна и понятная: ну раздвинули, значит уже видимое, считай поставили галочку. Возможно ли реализовать вариант 2 как я хочу, т.е. без дублирующих элементов (дублирующий текстовой файл и так существует, но я стараюсь не считывать его целиком и не лазить туда на тему строк, кот. и так отображаются). Т.е. чтобы ширину НЕотображаемых столбцов нельзя было менять(не сделав их Displayed из окна настройки), но отображаемых-пожалуйста. If Displayed=true двигай меня сколько хочешь else моя ширина всегда 0 и не надо такие значки (<-||->) даже рисовать end if ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 01:06 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Дмитрий77If Displayed=true двигай меня сколько хочешь else моя ширина всегда 0 и не надо такие значки (<-||->) даже рисовать end ifУвы, это не получится, я пробовал. Единственное, что удалось придумать, это устанавливать 0 при MouseMove. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 10:50 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Я тоже думал про это >устанавливать 0 при MouseMove при MouseMove чего? потому что ListView1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) похоже срабатывает только при движении по самому листу, а не по заголовкам. А вообще ощущение что в некоторых даже майкрософтовских программах именно так и сделано, потому как в конце крайнего столбца присутствует значок "отобразить" <-||-> таки, т.е. все hide-столбцы именно в конец и свалены и скорее всего происходит именно то о чем сказали. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 12:51 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Нашел пока вот это в тему http://www.eggheadcafe.com/software/aspnet/29754964/tooltiptext-and-the-listv.aspx Anyway, a ListView and column headers are actually 2 separate controls.. The column headers are a Header control. The ListView is just capable of automatically creating a Header control, but being a separate control, it has its own messages and events (API-wise). The ListView as wrapped in the Common Controls OCX simply doesn't expose messages/notifications for the Header control as events. You can, however, subclass the Header control. You shouldn't have a problem then detecting when the mouse is moved over it . Страшное слово subclass меня пугает. Надо что нибудь еще найти, пока не догоняю, как движение мыши по Header control отследить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 13:50 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
You can, however, subclass the Header controlВо, блин. А я до этого не додумался, сабклассил только листвью. Попробую на досуге. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 15:25 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Не хорошо, а как нужную mousemove выловить, хотя бы как вы делали. Пока что роюсь в примерах здесь в секции "Subclassing" http://www.vb-helper.com/index_api.html Там много интересного, но касательно озвученного вопроса (mousemove via headers или даже via чего-то более общего, что содержит via header) пока глухо. Смотрю в книгу, вижу фигу. CallWindowProc? Const WM_MOUSEMOVE = &H200 ? пока что не вяжется... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 15:40 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 15:42 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
банально то оно банально, но оно реагирует только при движении по самому ListView1, а когда двигаешь мышь вдоль заголовков события не происходит. М.б. свойства какие в Listview1 надо выставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 15:54 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 16:09 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Ну, допустим в header я попал, однако. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Мышь стала ловиться и делать то чего надо и где надо,т.е. отслеживаться: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Выглядит это похабно, т.е. колонка отодвигается, и только потом пружинит назад. Чего б такого сделать чтоб без мультипликации? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 18:11 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Забейте на MouseMove. Нужно распечатывать сообщения, постепенно отфильтровывая те, которые не имеют отношения к изменению ширины колонки (например то же &h200). Вероятно будут отдельные сообщения для <-||-> и для драга. Когда они приходят, делайте exit function. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 18:25 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Вот наверно http://www.gotdotnet.ru/DotNet/FAQ/WindowsForms/ListView/24432.aspx правда не в готовом виде case Messages.WM_LBUTTONDOWN: 201 case Messages.WM_LBUTTONDBLCLK:203 это я ловлю через предыдущий код дальше надо разобраться тогда с //посылаем сообщение HDM_HITTEST для определения дальнейших действий if (hitInfo.flags == HHT_ONDIVIDER) //не позволяем обработать WM_LBUTTONDOWN //(кнопка мыши была нажата для изменения ширины столбца) return; //позволяем обработать WM_LBUTTONDOWN break; } но при этом хорошо бы еще понять, в каком столбце находимся, т.к. открытые то я двигать позволяю. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 18:41 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
но при этом хорошо бы еще понять, в каком столбце находимсяЭто делается через сообщение HDM_HITTEST со структурой HDHITTESTINFO, в поле iItem которой возвращается индекс колонки. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2009, 18:58 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
В общем вывел среднее геометрическое. В тестовом проекте приведенный код намертво стопорит HTI.iItem = 2 Public Const HHT_ONHEADER = &H2 Public Const HHT_ONDIVIDER = &H4 'это <-|-> Public Const HHT_ONDIVOPEN = &H8 'это <-||-> Стопорить надо оба значка <-|-> <-||-> ибо первый при некоторых манипуляциях мышью тоже может "раздвинуть" Для неотображаемых колонок надо из окна настройки ставить ширину 0, скидывать их вправо и блокировать эти значки. И имеем чего надо в лучшем виде. Естествено для отображаемых колонок сдвиг на 0 не запретит их раздвижение снова, т.к. запрета нет а номер столбца проверяется. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2009, 03:21 |
|
Как лучше реализовать Add/Remove Columns на Listview?
|
|||
---|---|---|---|
#18+
Не нравится мне это Код: vbnet 1. 2. 3.
Переписал более грамотно: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2013, 15:20 |
|
|
start [/forum/topic.php?fid=60&msg=36287223&tid=2156713]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 150ms |
0 / 0 |