listview ведет себя иначе, когда используется в компоненте activex - PullRequest
1 голос
/ 04 ноября 2010

Я разрабатываю редактор изображений ActiveX, используя c # .net 2.0

Я использую контроль списка для отображения миниатюр изображений. Обычно, если вы используете клавишу Shift для выбора нескольких элементов, он выбирает весь диапазон между выбранным и выбранным элементом. Но при использовании в качестве activeX он выбирает элементы на прямоугольном холсте между выбранными и выбранными элементами.

Я не могу добавить картинку, поэтому буду иллюстрировать так:)

второй элемент выбран, и я нажимаю Shift на 7.

это то, что мне нужно:

х ххх
ххх
х

вот что происходит:

х хх х
х хх х

полужирный х: выделено.

Компонент используется в приложении на основе .net. также в веб-приложениях как объект activex. Я хочу, чтобы просмотр списка вел себя одинаково в любом месте. Есть идеи?

PS: .net ver 2.0

1 Ответ

2 голосов
/ 04 ноября 2010

Не совсем понятно, что может означать «используется как activex». Если это означает, что ваш компонент используется в другой программе, отличной от .NET, то у этого есть объяснение. Код для собственного элемента управления ListView, заключенного в класс .NET ListView, хранится в comctl32.dll. Существует две версии этой библиотеки DLL: одна в c: \ windows \ system32, другая в параллельном кэше Windows (c: \ windows \ winsxs \ etc ...)

Тот, что в system32, является устаревшей версией, используемой старыми программами. Для использования параллельной версии требуется, чтобы программа сообщала Windows, что она хочет использовать последнюю версию, а не устаревшую. Эти версии не ведут себя одинаково, и это может быть объяснено разным поведением при выборе элементов.

Вы подчиняетесь тому, что эта программа сообщает Windows. Обычно это делается путем включения манифеста, но это нереальный вариант. Это очень вероятно, чтобы сломать программу, когда она получает версию comctl32.dll, с которой она никогда не тестировалась. Программный способ - CreateActCtx (), вам нужно его вызвать, прежде чем создавать элемент управления ListView. Эта функция API не совсем проста в использовании. Подумайте, действительно ли вы хотите, чтобы представление списка работало иначе, чем любое другое представление списка, которое может использовать эта программа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...