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