2016-08-31 59 views
2

我正在研究WebBrowser控制應用程序,我需要處理選項卡按鍵並防止在html元素之間切換。我無法使用KeyDown事件,因爲WebBrowser控件不支持這些事件。所以看來我不得不使用PreviewKeyDown或類似的東西。任何想法如何編程?手柄Tab鍵按下WebBrowser控件並阻止在Html元素之間切換

+0

@RezaAghaei要取消Tab元素切換(當你按下Tab鍵,你的文本之間的頁面切換)。我知道有些方法可以做這種類型的東西,但我正在使用一個只有Flash遊戲的頁面,並且由於某種原因,它會在不存在的元素之間切換。通過使用Ctrl + Tab,我總是可以使用我想要的Flash遊戲的功能。對困惑感到抱歉。我真的很想在這個問題上做出我所說的......並且對我的英語感到抱歉,我會說葡萄牙語。 –

回答

2

可以hanlde KeyDown事件的WebBrowser.Document.Body,並檢查下鍵是標籤防止默認動作BU設置e.ReturnValue = false;,並執行所需的操作。

您可以使用HtmlElementEventArgs屬性來了解按下的按鍵和修改鍵的狀態。

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

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

void Body_KeyDown(object sender, HtmlElementEventArgs e) 
{ 
    if(e.KeyPressedCode==(int)Keys.Tab) 
     MessageBox.Show("Tab Handled"); 
    //Prevent defaut behaviour 
    e.ReturnValue = false; 
} 

您還可以限制上面的代碼到一個單一的元素:

webBrowser1.Document.GetElementById("someid").KeyDown += Body_KeyDown; 
+0

非常感謝,夥計!很好的答案! –

+0

對不起@RezaAghaei,但是你能幫我解釋一下你給出的答案嗎?只有當布爾值設置爲false時,我需要將Tab輸入轉換爲Ctrl選項卡,你能幫助我嗎?我有這樣的東西:'private void webBrowser1_PreviewKeyDown_1(object sender,PreviewKeyDownEventArgs e) {0121} } }' 而且我只想在Tab鍵設置爲false時,讓Tab像Ctrl + Tab一樣操作,我該怎麼做? –

+0

@DavidAmaral你可以簡單地使用SendKeys.Send(「^({TAB})」);'發送一個Ctrl + Tab。 –