У меня есть расстраивающая проблема. Вот упрощенная версия того, что я делаю:
UserControl в c# содержит панель инструментов и встроенный объект WebBrowser. Панель инструментов содержит кнопку "Edit", который, когда нажатые наборы webbrowser управляют в режиме проектирования. Другая кнопка, "Отмена", выключает режим проектирования.
Псевдокод (очень упрощенный):
public void SetDesignMode(bool dm) {
IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
if (dm) doc.designMode = "On";
else doc.designMode = "Off";
_designMode = dm;
ReloadDocument(); // setting designmode clears the document element, so it must be reloaded
}
public void OnLoadCompleted() {
IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
if (!_documentLoaded) {
if (_designMode) doc.designMode = "On";
else doc.designMode = "Off";
ReloadDocument();
_documentLoaded = true;
}
}
public void ReloadDocument() {
_documentLoaded = false;
// code that navigates to the document
}
Проблема: Если я нажму на отображенную веб-страницу, и затем на кнопке "Edit", то управление WebBrowser не станет доступным для редактирования. Указатель мыши при уборке пылесосом по изображениям/ссылкам показывает указатели мыши навигации веб-браузера, не редактирования. Если я нажму в тексте, то каре не отобразится.
Отладка показывает, что designMode свойство на документе на самом деле установлено на "На" в этой ситуации, но управление ведет себя, как будто это установлено на "Прочь".
Если я не нажимаю в веб-странице прежде, чем нажать кнопку "Edit", все работает как ожидалось.
Разработка: Если я нажимаю кнопку "Cancel", когда управление находится в режиме проектирования, я получаю соответствующее (mis) поведение, если документ был нажат в.
Просто нажимая на "Edit", затем "Отмена", затем "Редактирование" и т.д., никогда не нажимая в документе хорошо работает (тест наведения мыши показывает надлежащие указатели мыши, и я получаю навигацию ссылки или редактирующий в зависимости от режима проектирования, если я нажимаю на ссылку в отображенном документе).
Я попробовал различные методы, чтобы удостовериться, что другое управление получает фокус, прежде чем я изменю designMode свойство, но это не имеет никакого значения. Я искал MSDN и половину известного Интернета и не нашел упоминания об этом виде проблемы. Зеркальное отражение designMode свойства как это, кажется, вполне unusal.
Еще один лакомый кусочек информации: я настраиваю события документа путем уведомления документу с приемником, реализованным usercontrol. Я сомневаюсь, что это должно иметь любое влияние на проблему, но я включал его здесь ради того, чтобы быть завершенным. Обновление: Отключение этого ничего не изменяет относительно проблемы.
Кто-либо распознает эту проблему?
Обновление: я работал вокруг проблемы путем воссоздания управления веб-браузером в SetDesignMode (). Это - ужасное решение, но это работает и действительно на самом деле смотрит хорошо. Я очень интересуюсь любой обратной связью на этой проблеме, все же. Я полагаю, что это - ошибка в MSHTML.