Элемент управления ActiveX становится пустым в одном хост-контейнере, но не в других - PullRequest
0 голосов
/ 02 августа 2010

Мне нужно использовать ActiveX, чтобы создать плагин для устаревшего приложения. Я использую C #, чтобы я мог поделиться кодовой базой нескольких связанных автономных продуктов.

Когда я размещаю элемент управления в тестовом контейнере SDK (TstCon32.exe), все работает нормально. Проблема в том, что когда я пытаюсь загрузить его в целевое приложение при первом нажатии на элемент управления, все, кроме элемента, на который я нажал (текстовое поле или ячейка таблицы данных), закрашивается серым элементом управления, если я изменяю цвет фона Для элемента управления для чего-либо другого фон остается тем же цветом, который я указал, но все элементы управления все еще покрыты серым элементом управления (из приложения контейнера?). Нажатие на дополнительные элементы управления заставит их рисовать, изменение размера элемента управления заставит все перекрасить. После первоначального гашения управление функционирует нормально до следующего создания копии.

1 Ответ

1 голос
/ 11 августа 2010

Я наконец нашел решение. Первая часть состояла в том, чтобы изменить мою целевую среду с 4.0 до предыдущей версии. Это выявило исключение, которое имело место при отключении элемента управления, который ранее потреблялся и скрывался от меня:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at System.Windows.Forms.UnsafeNativeMethods.IOleInPlaceSite.OnUIActivate()
   at System.Windows.Forms.Control.ActiveXImpl.InPlaceActivate(Int32 verb)
   at System.Windows.Forms.Control.ActiveXImpl.OnFocus(Boolean focus)
   at System.Windows.Forms.Control.ChildGotFocus(Control child)
   at System.Windows.Forms.Control.OnGotFocus(EventArgs e)
   at System.Windows.Forms.Control.WmSetFocus(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Оттуда я смог найти сообщение от tomasvdb, который столкнулся с той же проблемой, что и у меня с боковой панелью Google.

Один из ответов на этот пост, связанный с этим сообщением , предоставившим обходной путь для ошибки, когда приложение боковой панели отправляло недопустимые данные в элемент управления .net.

Вызов этого метода обхода в обработчике VisibleChanged элемента управления также решил мою проблему.

...