2009-07-04 16 views
6

私が書いたJavaScriptの重いページを表示するために使用している.NET WebBrowserコントロールがあります。このページはYUIを使用し、移植可能な方法で構築されています。.NET WebBrowserコントロールのJavascriptキーアップ/キーダウン

私はちょうど私がjavascriptでkeypressをキャプチャすることができますが、私はkeyupまたはkeydownをキャプチャすることができないことを発見しましたjavacript。これは、例えば、ESC、CTRL + A、UP、RIGHT、TABを引っ掛けるのを防ぎます。

私は、キーを.NETでキャプチャできることを理解しています。これらのうちのいくつかには「ハッキング」があることを理解しています。たとえば、Ctrl + Aの場合はDocument.ExecCommand( "SelectAll"、..、..)です。 ---ところで、私はまだSendKeys.Send( "{TAB}")をタブのために動かすことができません。私は、.NETを使用してUPの矢印を処理する関数を実行することができることを認識していますが、移植性とベストプラクティスの理由から、これをしたくありません。

私はなぜキーアップ/キーダウンイベントをキャプチャすることができないのか説明できますか?または回避策を提案してください。

ありがとうございます!

答えて

0

JavaScriptで矢印キーの押さえ方を示すコードを少し書いてあります。 //developer.yahoo:それは大丈夫でなければなりませんので、私はIEとFirefoxでこれをテストしている...

<input id="Text1" type="text" onkeydown="keyPress(event)" /> 

<script type="text/javascript"> 
    function keyPress(e) 
    { 
     var textBox = document.getElementById('Text1'); 

     var keynum; 

     if (window.event) // IE 
      keynum = e.keyCode; 
     if (e.which) // Other browser 
      keynum = e.which; 

     switch (keynum) 
     { 
      case 38: 
       textBox.value = 'Up Arrow'; 
       break; 
      case 37: 
       textBox.value = 'Left Arrow'; 
       break; 
      case 40: 
       textBox.value = 'Down Arrow'; 
       break; 
      case 39: 
       textBox.value = 'Right Arrrow'; 
       break; 
      default: 
       textBox.value = 'Another key'; 
       break; 
     } 
    } 
</script> 

は、それが役立ちます:)

1

私はYUI(時間TTPからこの例をロードしようとした願っています。 com/yui/examples/container/keylistener_clean.html)を、私がWebBrowser ControlをドロップしたWinFormアプリケーションで実行しても問題ありません。 この例ではkeyupイベントを使用していますので、あなたのケースに合っていると思います。あなたはWebBrowserコントロールがhttp://blogs.msdn.com/ie/archive/2008/03/18/webbrowser-control-rendering-modes-in-ie8.aspx

を実行しているモードでチェックすることをお勧めします

マルコ

2

ちょうどATLのWebブラウザコントロール(CAxHost)でこの問題に自分自身を実行しました。 winformsでこれを行う方法はわかりませんが、実行する必要があるのは、メッセージオブジェクト内でTranslateMessageを呼び出す前に、IOleInPlaceActiveObjectのQueryInterfaceをブラウザオブジェクトからオフにしてからIOleInPlaceActiveObject :: TranslateAcceleratorを呼び出します。私はwinformsでこれは、IOleInPlaceActiveObjectプロパティ(おそらく、あなたはpinvoke.netからインターフェイスの定義を見つけることができます)

これは実際には、コントロールのアクセラレータ、リフレッシュなどのためのF5)が、この呼び出しのキーとなるキーダウンイベントが表示されます。これらのアクセラレータのいくつかをブロックする場合は、ブラウザのAxホストにIDocHostUIHandler :: TranslateAcceleratorを実装し、テストするOleコマンドをチェックしてオフにすることでそうすることができます。

関連する問題