2016-04-02 27 views
1

キーが押されてもキーボードが登録されていないように見せかけています。 私は、特定のものではなく、どんなキーでも何かを起こそうとしています。キー入力が登録されていません

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows; 
using System.Windows.Input; 

namespace KeyDown 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     public static IEnumerable<Key> KeysDown() 
     { 
      foreach (Key key in Enum.GetValues(typeof(Key))) 
      { 
       if (Keyboard.IsKeyDown(key)) 
        yield return key; 
      } 
     } 

     private void MainGrid_KeyDown(object sender, KeyEventArgs e) 
     { 
      if(KeysDown().Any()) 
      { 
       MessageBox.Show("Key pressed"); 
      } 
     } 
    } 
} 

何も起こらず、MainGridはフォーカス可能です。

このソリューションを試してみてください: How to detect if any key is pressed まだ何も起こりません。

+1

イベントハンドラを定義したばかりです。実際にイベントに登録した場所はわかりません。 – Tal87

+0

'if(Keyboard.IsKeyDown(Key.Return))'キーを登録する方法はありませんか? – Simon

+0

これはWPFです! asp.netではない! – marko

答えて

1

このトピックに関する議論がありますhere。中心としたいくつかの問題があり、これを試してみてください。

XAML

<Grid x:Name="myGrid" Width="Auto" Height="Auto" KeyDown="MainGrid_KeyDown" Focusable="True" /> 

コードを

namespace KeyDown 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      myGrid.Focus(); // focus programmatically, better put it in OnLoaded event 
     } 

     private void MainGrid_KeyDown(object sender, KeyEventArgs e) 
     { 
      MessageBox.Show("Key pressed"); 
     } 
    } 
} 

の後ろに私の意見はGridが中空であるかもしれないし、フォーカスを持つために意図されていない、他のコントロールを挿入しましたフォーカスを合わせやすく、KeyDownイベントを追加します。また、KeyDownPreviewKeyDownの間にいくつかの違いがあることを確認してください。

+0

作品、ありがとうございます! – Simon

0

メインウィンドウのコンストラクタでイベントハンドラを作成する必要があります。このような 何か:

MainGrid.KeyDown += new RouteEventHandler(MainGrid_KeyDown); 

https://msdn.microsoft.com/en-us/library/ms743596%28v=vs.100%29.aspx

イベントハンドラであれば(。KeysDown()任意の())を削除します。また、オブジェクトの送信者とKeyEventArgsから何を得るかを見てください。

+0

型または名前空間の名前 'RouteEventHandler'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありません) System.Windowsが使用されています。 – Simon

+0

デザイナーのイベントリストも同じではありませんか?そこからイベントハンドラを作ったのですが? – Simon

+0

私は間違っていると思っています - RouteEventHandler - ちょうどイベントハンドラかもしれません。デザイナーにもイベントを宣言することができます。 – marko

関連する問題