2014-09-09 2 views
0

Я пытался включить автозаполнение форм в элементе управления System.Windows.Forms.WebBrowser.Как включить автозаполнение форм в элементе управления WebBrowser

Internet Explorer предоставляет этот параметр Internet Options->Content->Autocomplete->Use Autocomplete for Forms. Если это активировано, когда вы начинаете вводить «a» в элемент HTML, он отображает список ваших предыдущих записей, начинающихся с «a» (может быть, «apple» и «android»). Я хочу то же самое в своем элементе управления WebBrowser.

Я применил IDocHostUIHandler в своем классе и сделал GetHostInfo, установив флаг DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE, но флаг, похоже, ничего не делает. Другие флаги, такие как DOCHOSTUIFLAG.DOCHOSTUIFLAG_NO3DBORDER, работают так, как ожидалось, поэтому я знаю, что вызываются вызовы GetHostInfo.

Некоторые люди сообщают успеха от установки этого флага, в то время как другие этого не делают: http://microsoft.public.inetsdk.programming.webbrowser-ctl.narkive.com/MSQ6nobe/can-t-get-autocomplete-to-work-in-hosted-webbrowser-control

http://www.44342.com/webbrowser-control-f125-t1436-p1.htm

Я называю ICustomDoc.SetUIHandler(this as IDocHostUIHandler) в DocumentCompleted методе моего WebBrowser, так что методы IDocHostUIHandler интерфейса вызываются с помощью MSHTML.

Я полагаю, что это может быть важно, чтобы убедиться, что мое приложение верно читает раздел реестра HKCU\Software\Microsoft\Internet Explorer\Main\Use FormSuggest, возможно, используя IDocHostUIHandler.GetOptionKeyPath или IDocHostUIHandler.GetOverrideKeyPath, как предложили люди в другом месте. Я попытался реализовать их, но я не мог заставить их вызвать вызов.

Я использовал средство Process Monitor, чтобы проверить, какие ключи реестра мое приложение запрашивает, и Use FormSuggest не запрашивался вообще. Он пытался запросить HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\FormSuggest, но изменение этого ключа не оказало никакого эффекта.

Есть ли что-нибудь еще, что я мог бы сделать, чтобы получить работу Autocomplete? Благодарю.

+0

Вы желая заполнить свой собственный автозаполнения список слов, или просто показать предыдущие значения пользователя набранный специально с помощью IE? – Loathing

+0

@Loathing Я хочу, чтобы те же функции, что и IE, отображали предыдущие входы, которые пользователь сделал. Он мог бы поделиться списком предыдущих значений с IE или нет, в любом случае это будет хорошо. Я не хочу заполнять свой собственный автозаполненный список слов программно. –

ответ

1

Следующие работал для меня: (проверено с помощью моего WordPress URL)

Перейти к этому StackOverflow нить и скопировать ImprovedBrowser ответ: WebBrowser: Drag&Drop

Затем заменить DocHostUIFLAG с: (тот, в оригинальный пост имеет только частичный список) Вы можете прочитать описание значений флага на MSDN DOCHOSTUIFLAG Enumerated Type

[Flags] 
public enum DOCHOSTUIFLAG 
{ 
    DIALOG = 0x00000001, 
    DISABLE_HELP_MENU = 0x00000002, 
    NO3DBORDER = 0x00000004, 
    SCROLL_NO = 0x00000008, 
    DISABLE_SCRIPT_INACTIVE = 0x00000010, 
    OPENNEWWIN = 0x00000020, 
    DISABLE_OFFSCREEN = 0x00000040, 
    FLAT_SCROLLBAR = 0x00000080, 
    DIV_BLOCKDEFAULT = 0x00000100, 
    ACTIVATE_CLIENTHIT_ONLY = 0x00000200, 
    OVERRIDEBEHAVIORFACTORY = 0x00000400, 
    CODEPAGELINKEDFONTS = 0x00000800, 
    URL_ENCODING_DISABLE_UTF8 = 0x00001000, 
    URL_ENCODING_ENABLE_UTF8 = 0x00002000, 
    ENABLE_FORMS_AUTOCOMPLETE = 0x00004000, 
    ENABLE_INPLACE_NAVIGATION = 0x00010000, 
    IME_ENABLE_RECONVERSION = 0x00020000, 
    THEME = 0x00040000, 
    NOTHEME = 0x00080000, 
    NOPICS = 0x00100000, 
    NO3DOUTERBORDER = 0x00200000, 
    DISABLE_EDIT_NS_FIXUP = 0x00400000, 
    LOCAL_MACHINE_ACCESS_CHECK = 0x00800000, 
    DISABLE_UNTRUSTEDPROTOCOL = 0x01000000, 
    HOST_NAVIGATES = 0x02000000, 
    ENABLE_REDIRECT_NOTIFICATION = 0x04000000, 
    USE_WINDOWLESS_SELECTCONTROL = 0x08000000, 
    USE_WINDOWED_SELECTCONTROL = 0x10000000, 
    ENABLE_ACTIVEX_INACTIVATE_MODE = 0x20000000, 
    DPI_AWARE = 0x40000000 
} 

Затем измените GetHostInfo на:

int NativeMethods.IDocHostUIHandler.GetHostInfo(ref NativeMethods.DOCHOSTUIINFO info) 
    { 
     var ret = _baseIDocHostUIHandler.GetHostInfo(ref info); 
     // must be done after because base.GetHostInfo(...) resets the flags 
     info.dwFlags = info.dwFlags | (int) NativeMethods.DOCHOSTUIFLAG.ENABLE_FORMS_AUTOCOMPLETE; 
     return ret; 
    } 
+0

Работал отлично! Благодарю. –

Смежные вопросы