0

私は C# とプログラミングが初めてなので、これは簡単に思えるかもしれませんが、一生懸命助けを求めました。

Visual Studio 2012 のオブジェクト (具体的には、楕円) に WASD コントロールを実装しようとしています。オブジェクトの操作方法を理解しています。問題はユーザー入力の収集です。

過去には人々System.Windows.Formsが を使用していたようですが、それがもはや存在するかどうかはわかりません (トークンが不足していると表示され、参照を追加しようとすると、すべてが追加されたと表示されます)。

グリッドにキーダウン イベントを追加しようとしましたが、トリガーされません。にあったため、フォーカスをグリッドに設定できませんSystem.Windows.Forms

私の質問: WASD コントロールの実装方法に関するヒントはありますか? 具体的には、オブジェクトに手動でフォーカスを追加せずにユーザーがキーを押したときに登録するにはどうすればよいですか?

4

1 に答える 1

2

あなたはVS2012、C#と言っているので、ElipseファイルSystem.Windows.Forms- >新しいプロジェクト - > WPFアプリケーションを実際に行ったという推測を危険にさらすつもりです(楕円コントロール(プリミティブ)がバットから離れているため)。

フォーカスを得ることができないためElipse、キーの押下が興味深い場合を判断する必要があります。これを行うには、ウィンドウにハンドラーを追加します。XAML のサンプルを次に示します。

  <Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" KeyDown="Window_KeyDown">
    <Grid>
      <Ellipse x:Name="elipsy" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100" Canvas.Left="241" Canvas.Top="119"/>
    </Grid>
  </Window>

ハンドラー ( Window_KeyDown) で、次のことができます。

    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.W)
        {
            Canvas.SetTop(elipsy, Canvas.GetTop(elipsy) - 1);
        }
        else if (e.Key == Key.A)
        {
            Canvas.SetLeft(elipsy, Canvas.GetLeft(elipsy) - 1);
        }
        else if (e.Key == Key.S)
        {
            Canvas.SetTop(elipsy, Canvas.GetTop(elipsy) + 1);
        }
        else if (e.Key == Key.D)
        {
            Canvas.SetLeft(elipsy, Canvas.GetLeft(elipsy) + 1);
        }
    }

これにより、正しい軌道に乗ることができます。あなたが本当にWinFormsに大声を出したいのであれば、そこで同様の解決策を見つけることができるはずです.

于 2013-06-04T03:51:35.433 に答える