非常に単純な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.
}
}
Form.AcceptButton プロパティを確認してください。これを使用して、フォームのデフォルトボタン(この場合はEnterキーを押す)を指定できます。
ドキュメントから:
このプロパティを使用すると、ユーザーがアプリケーションでEnterキーを押したときに発生するデフォルトのアクションを指定できます。このプロパティに割り当てられるボタンは、現在のフォーム上にあるか、現在のフォーム上のコンテナ内にあるIButtonControlでなければなりません。
ユーザーがエスケープを押したときのための CancelButton プロパティもあります。
わたしにはできる:
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は本当にトリックです。それがお役に立てば幸いです。
試して
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
}
}
あなたはKeyUpまたはKeyDownの代わりにKeyPressを使用することができます
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
button1.PerformClick();
}
}
「丁」に平和を言う
「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.
}
}
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
}
}
}
誰もこの答えにたどり着く可能性はほとんどありませんが、他のいくつかの答えは本当に怖いです。 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)
これで、focus
をfocus
で転送する場合にのみTextBox
を転送したい場合がありますActiveControl
タイプをテストするか、意図しないコントロールのイベントハンドラーでe.Supress
プロパティを使用する場合がありますEnter
をTAB
として使用します。 e.KeyCode
をキャプチャする必要さえありません
これが私のために働いたKeyDownを処理しようとしたときに私はこの投稿につまずいた。
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
btnLogIn.PerformClick()
End If
キーを押すと、イベントが基になるコントロールに送信されなくなります。 Enterキーがそのテキストボックス内で行うすべてを手動で処理している場合、これは機能するはずです。 Visual Basicについては申し訳ありません。
$("#txtSomething").keypress(function (e) {
if (e.which == 13) {
e.Handled = true; //This will prevent the "Ding" sound
//Write the rest of your code
}
});
[検索]ボタンの IsDefault プロパティをtrue
に設定します。これにより、デフォルトのボタンになり、Enterを押すと自動的にクリックされます。
さて、私はこの問題を十分に長く生きて、ここで調べました。
かなり長い間これについて考え、それを修正する最も簡単な方法を望んでいた後、私はそれを修正する最も簡単であるがそれほどエレガントではない方法を思いつきました。
これが私がしたことです。
これにより、ToolStripMenuを含むこのスレッドにリストされているすべての二次的な問題が解決されました。私の最大の不満はBindingNavigatorで、現在の位置にレコード番号を入力して、ナビゲートしてEnterキーを押しました。
エンターボタンが押されたときにプログラマーが検索機能を望んでいた元の質問に従って、私は単に目に見えないOKボタンに検索コードを入れました!
これまでのところ、これですべての問題が解決するように見えますが、Visual Studioで知っているように、おそらく何かが発生するでしょう。
他に考えられる唯一のエレガントな方法は、新しいキーストローク処理クラスを作成することです。これは、ほとんどのプロジェクトで多くの作業を行う方法です。