2017-08-20 14 views
1

私はRichTextBox(rtb_inputField)を持っています。このRTBに何かを入力してEnterキーを押すと、入力した文字列がサーバーに送信されます。その後、同じ文字列をrtb_inputFieldに戻して、プログラムで選択します(この方法では、ユーザーは同じデータを簡単に入力することができます。または、もう一度Enterキーを押すことで別の文字列を送信できます)。RichTextBox入力をバイパスすることは可能ですか

ここで私がしたいのは、NumLockがロックされていて、数字キー(0〜9)のいずれかを押すと、rtb_inputFieldを完全にバイパスしたいと思っています。バイパスとは、RTBに数値を入力せず、代わりにこれらの数値を直接処理することです。 (私はこの方法でサーバーにデータをすばやく送信する予定ですが、ユーザーがRTBに書き込んだ最後のコマンドは変更されません)。

NumLockがロックされていない場合は、数値をRTBに挿入します。

これは可能ですか?ここで

は私が現時点で持っているコードです:(あなたが唯一のこの質問に対して関連性のものを見るように私はそれを変更しました。)

private List<Keys> numPadList = new List<Keys>(); 

    private void populateNumPadList() { 
     numPadList.Add(Keys.NumPad0); 
     numPadList.Add(Keys.NumPad1); 
     numPadList.Add(Keys.NumPad2); 
     numPadList.Add(Keys.NumPad3); 
     numPadList.Add(Keys.NumPad4); 
     numPadList.Add(Keys.NumPad5); 
     numPadList.Add(Keys.NumPad6); 
     numPadList.Add(Keys.NumPad7); 
     numPadList.Add(Keys.NumPad8); 
     numPadList.Add(Keys.NumPad9); 
    } 


    private void rtb_inputField_KeyDown(object sender, KeyEventArgs e) { 
     if ((numPadList.Contains(e.KeyData)) && (IsKeyLocked(Keys.NumLock))) { 
      //The user pressed a numpad key 
      MessageBox.Show("You pressed: " + e.KeyData.ToString()); 
      e.Handled = true; 

     } 

    } 

    private void rtb_inputField_KeyUp(object sender, KeyEventArgs e) { 
     RichTextBox inputField = (RichTextBox)sender; 
     string userInput = inputField.Text.Trim(); 

     if ((e.KeyData == Keys.Enter) && (sender == rtb_inputField)) { 

       if (client.Connected) { 
        macroString = runInputThroughMacroDictionary(userInput); 

        //do stuff.. 

        writer.WriteLine(macroString); 
       } 

     } 

     //lots of other stuff.. 
    } 

私は感覚で作品を持ってこのコード:それだけのトリガーNumLockがロックされている場合、MessageBoxはnumKeyを押したことを通知します。しかし、それは私が望むようにRichTextBoxをバイパスしません。

+0

RTBを無効にすることはできません。両方をサーバーに送信する手段として使用するためです。 RTBはデータを送信する「洗練された、しかし遅い」方法ですが、数字パッドは非常に基本的なクイックコマンドしか送信できません。 –

答えて

1

KeyPressイベントハンドラでは、すべてを行ったと思ったときにe.Handledtrueと設定し、RichTextBoxはそのキーを処理しません。

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (_toBeIgnored) 
    { 
     e.Handled = true; 
     return; 
    } 
} 

private bool _toBeIgnored; 

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (IsKeyLocked(Keys.NumLock)) 
    { 
     _toBeIgnored = true; 
     return; 
    } 
} 
+0

私のメソッドuserSentInput()は、RichTextBoxにOnKeyDownイベントとして登録されています。 if文を一番上に移動し、e.Handled = trueを追加しようとしましたが、うまくいきませんでした。 フォーム自体に登録されたsepareメソッドを作成しようとしましたが、それも機能しませんでした。私は何か間違っている必要がありますか? (オリジナルのポストコードを新しいものに更新します) –

+0

@Phrosen:それはKeyPressイベントハンドラに含まれている必要があります。 –

+0

KeyPressに関する問題は、 'KeyPressEventArgs'に 'KeyData'の定義が含まれていないためです私はそれがnumPad番号かどうかをチェックする方法を知らない。 –

関連する問題