2016-05-25 10 views
0

入力フィールドとして10個のテキストボックスを使用するC#Windowsフォームアプリケーションがあり、これをプログラムできるようにしたいので、フォーカスがあるテキストボックスに上向き矢印Keys.Up)または下向き矢印(Keys.Down)を押すと、フォーカスが次または前のテキストボックスにジャンプします。C# - 矢印キーを使用して入力フィールドを切り替えることを許可する

 if (e.KeyChar == Convert.ToChar(Keys.Up)) 
     { 
      GetNextControl((TextBox)sender, false); 
     } 
     else if (e.KeyChar == Convert.ToChar(Keys.Down)) 
     { 
      GetNextControl((TextBox)sender, true); 
     } 

私の唯一の懸念は、これが実際のテキストの入力を妨害するかどうかではありません。

これまでのところ、私はこのようなものを使用する予定。上のコードを以下のコードのように変更する必要がありますか?

 if (e.KeyChar == Convert.ToChar(Keys.Up)) 
     { 
      GetNextControl((TextBox)sender, false); 
     } 
     else if (e.KeyChar == Convert.ToChar(Keys.Down)) 
     { 
      GetNextControl((TextBox)sender, true); 
     } 
     //any other key pressed 
     else 
     { 
      TextBox input = (TextBox)sender; 
      //add char relating to pressed key to text in TextBox 
      input.AppendText(e.KeyChar.ToString()); 
     } 

このelse句は必要ですかTextBoxのデフォルトの操作は、この条件を処理しますか?

おかげで、 マーク

+3

疑問がある場合は、小さなテストプロジェクトを作成してください。 – BugFinder

+0

私はこれについて考えていましたが、私がここに投稿してほしいと思っていたのは、私がこれに最善のアプローチを取っていたのか、既存の機能@BugFinderについて知らなかった – marcuthh

+0

コントロール間のフォーカスのデフォルト処理がうまくいかないユーザーの習慣から始めてやめるのはお勧めできません – Steve

答えて

1

キーアップためe.KeyCharは何ですか? charを使用しますが、キーコードしないでください:

private void myTextBoxes_KeyDown(object sender, KeyEventArgs e) { 
    // KeyCode: there're no reasonable chars after "Up" or "Down" keys 
    if (e.KeyCode == Keys.Up) { 
    e.Handled = true; // to prevent system processing 

    // (Control): what if you want to add, say, RichEdit into the pattern? 
    GetNextControl((Control) sender, false); 
    } 
    else if (e.KeyCode == Keys.Down) { 
    e.Handled = true; // to prevent system processing 

    GetNextControl((Control) sender, true); 
    } 
} 
+0

これはうまくいきました、ありがとう! – marcuthh

+0

@marcuthh:ようこそ! –

1

は良い計画のようですね。あなたの例のためにそれは動作します。

PreviewKeyDownイベントについて読んでみることをお勧めします(理由:いくつかのコントロールの上下キーでKeyDownイベントが発生することはありませんが、テキストボックス)。

GetNextControlについては、スキップされる内容をより細かく制御できるように、FindForm()、SelectNextControl()を代わりに使用すると便利です。

P.S.また... GetNextControlはコントロールを返します。しかし、それにジャンプしません。 .Focus()を追加する必要があります。

関連する問題