2015-11-12 69 views
1

我正在努力與WebBrowser控件(在Winforms和WPF中)。基本上我想要達到與RTF編輯器相同的行爲:處理某種事件OnTextInput事件以獲取每個擊鍵的最後一個鍵入字符。WebBrowser控件TextInput事件

我的意思是可以用Keydown/Keyup事件捕獲的文本字符,而不是Control,Alt,F5,Enter,...。

任何幫助?提前致謝。

+0

哪裏的內容從何而來?內容是否來自屬於您的html文件? –

+0

是的,我使用DesignMode和NavigateToString結合來創建來自數據庫的HTML文檔。 –

+0

你想處理關鍵事件? –

回答

1

可以hanlde KeyPress事件的this.webBrowser1.Document.Body

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.webBrowser1.Navigate("http://www.google.com"); 
    //Attach a handler to DocumentCompleted 
    this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
} 


void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    //Attach a handler to Body.KeyPress when the document completed 
    this.webBrowser1.Document.Body.KeyPress += Body_KeyPress; 
} 

void Body_KeyPress(object sender, HtmlElementEventArgs e) 
{ 
    //handle the event, for example show a message box 
    MessageBox.Show(((char)e.KeyPressedCode).ToString()); 
} 

注:

  • ,因爲你需要它不處理非輸入鍵。
  • 如果需要,您還可以根據某些標準設置e.ReturnValue = false;來抑制輸入。
  • 您還可以處理其他重要事件,如KeyUpKeyDown以同樣的方式
+0

感謝您的回答,但我並不完全瞭解它。這樣,MessageBox將只顯示一半的時間,對吧?我想爲每個「文本」按鍵組成一個過濾器,以便我不確定這是否合適。 –

+0

顯示'MessageBox'只是一個示例,您可以使用'((char)e.KeyValue).ToString()'。主要的一點是使用你要求的'PreviewKeyDown'事件**處理某種OnTextInput事件,以便獲得每個擊鍵的最後一個鍵入的字符。**我認爲該文章回答你的問題:) –

+0

是的,但這種方式當F1,F2,Fx ...,Ctrl,Alt,Mayus,ArrowLeft,ArrowRight等等時,它也會被觸發。是否有任何「智能」方法來防止添加這些類型的擊鍵? WPF RichTextBox控件已經提供了在這些情況下未觸發的OnTextInput。 –