web-dev-qa-db-ja.com

Enterキーを押したときに「Ding」を停止します

非常に単純なWindowsフォームアプリケーションがあります。また、Windows(または少なくともWindowsフォームアプリケーション)では、単一行のTextBoxコントロール内でEnterキーを押すと、Dingが聞こえます。それは不快な音で、改行は単一行のTextBoxであるため、改行を入力できないことを示しています。

これはすべて大丈夫です。ただし、フォームには1つのTextBoxと検索ボタンがあります。そして、ユーザーが入力を終えた後にEnterキーを押して検索を実行できるようにしているので、マウスを使用してクリックすることはありませんhave検索ボタン。

しかし、このディンの音が発生します。それは非常に迷惑です。

フォームでその音だけがまったく再生されないようにするにはどうすればよいですか?

@David H-Enterキーが押されたことを検出する方法は次のとおりです。

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // Perform search now.
    }
}
110
bendr

Form.AcceptButton プロパティを確認してください。これを使用して、フォームのデフォルトボタン(この場合はEnterキーを押す)を指定できます。

ドキュメントから:

このプロパティを使用すると、ユーザーがアプリケーションでEnterキーを押したときに発生するデフォルトのアクションを指定できます。このプロパティに割り当てられるボタンは、現在のフォーム上にあるか、現在のフォーム上のコンテナ内にあるIButtonControlでなければなりません。

ユーザーがエスケープを押したときのための CancelButton プロパティもあります。

51
mdm

わたしにはできる:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{

    //Se apertou o enter
    if (e.KeyCode == Keys.Enter)
    {
        //enter key is down

        this.doSomething();

        e.Handled = true;
        e.SuppressKeyPress = true;

     }

 }

SuppressKeyPressは本当にトリックです。それがお役に立てば幸いです。

177
Lucio Fonseca

試して

textBox.KeyPress += new KeyPressEventHandler(keypressed);

private void keypressed(Object o, KeyPressEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.Handled = true; //this line will do the trick
    }
}
51
FIre Panda

あなたはKeyUpまたはKeyDownの代わりにKeyPressを使用することができます

  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
        {
            e.Handled = true;
            button1.PerformClick();
        }
    }

「丁」に平和を言う

11
Mawardy

「if」ステートメントにe.SuppressKeyPress = true;を追加するだけです。

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //If true, do not pass the key event to the underlying control.
        e.SuppressKeyPress = true;  //This will suppress the "Ding" sound.*/

        // Perform search now.
    }
}
10
brandonstrong

SuppressKeyPressを使用して、キーストロークの処理後にキーストロークの継続処理を停止します。

public class EntryForm: Form
{
   public EntryForm()
   {
   }

   private void EntryTextBox_KeyDown(object sender, KeyEventArgs e)
   {
      if(e.KeyCode == Keys.Enter)
      {
         e.Handled = true;
         e.SuppressKeyPress = true;
         // do some stuff

      }
      else if(e.KeyCode == Keys.Escape)
      {
          e.Handled = true;
          e.SuppressKeyPress = true;
          // do some stuff

      }
   }

   private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
   {
      if(e.KeyCode == Keys.Enter)
      {
         // do some stuff

      }
      else if(e.KeyCode == Keys.Escape)
      {
         // do some stuff

      }
   }
}
7
Snehasish

誰もこの答えにたどり着く可能性はほとんどありませんが、他のいくつかの答えは本当に怖いです。 KeyDownのイベントを抑制すると、1回の攻撃で2つの追加イベントが削除されます。このコンテキストでは、e.Handledプロパティをtrueに設定しても意味がありません。
最良の方法は、Form.AcceptButtonプロパティを実際の検索ボタンに設定することです。
Enterキーを利用する別の方法もあります-一部の人々はTABボタンとして機能させたい場合があります。それを行うには、新しいButtonを追加し、LocationプロパティをFormエリアの外に設定します(つまり(-100, -100))-Visibleプロパティをfalseに設定すると無効になる場合があります場合によってはButtonハンドラー。 Form.AcceptButtonプロパティを新しいボタンに設定します。 Clickイベントハンドラーに次のコードを追加します
this.SelectNextControl(ActiveControl, true, true, true, true)

これで、focusfocusで転送する場合にのみTextBoxを転送したい場合がありますActiveControlタイプをテストするか、意図しないコントロールのイベントハンドラーでe.Supressプロパティを使用する場合がありますEnterTABとして使用します。 e.KeyCodeをキャプチャする必要さえありません

2
ArtK

これが私のために働いたKeyDownを処理しようとしたときに私はこの投稿につまずいた。

If e.KeyCode = Keys.Enter Then
   e.SuppressKeyPress = True
   btnLogIn.PerformClick()
End If

キーを押すと、イベントが基になるコントロールに送信されなくなります。 Enterキーがそのテキストボックス内で行うすべてを手動で処理している場合、これは機能するはずです。 Visual Basicについては申し訳ありません。

2
Colin
$("#txtSomething").keypress(function (e) {
        if (e.which == 13) {

            e.Handled = true; //This will prevent the "Ding" sound

            //Write the rest of your code
        }
    });
1
Code.Town

[検索]ボタンの IsDefault プロパティをtrueに設定します。これにより、デフォルトのボタンになり、Enterを押すと自動的にクリックされます。

0
Zruty

さて、私はこの問題を十分に長く生きて、ここで調べました。

かなり長い間これについて考え、それを修正する最も簡単な方法を望んでいた後、私はそれを修正する最も簡単であるがそれほどエレガントではない方法を思いつきました。

これが私がしたことです。

  1. 2つの非表示ボタン「OK」と「キャンセル」をフォームに配置します。
  2. フォームのAcceptButtonプロパティとCancelButtonプロパティを非表示ボタンに設定します。
  3. ボタンにコードを追加しませんでした!

これにより、ToolStripMenuを含むこのスレッドにリストされているすべての二次的な問題が解決されました。私の最大の不満はBindingNavigatorで、現在の位置にレコード番号を入力して、ナビゲートしてEnterキーを押しました。

エンターボタンが押されたときにプログラマーが検索機能を望んでいた元の質問に従って、私は単に目に見えないOKボタンに検索コードを入れました!

これまでのところ、これですべての問題が解決するように見えますが、Visual Studioで知っているように、おそらく何かが発生するでしょう。

他に考えられる唯一のエレガントな方法は、新しいキーストローク処理クラスを作成することです。これは、ほとんどのプロジェクトで多くの作業を行う方法です。

0
user2793447