プロが教える店舗&オフィスのセキュリティ対策術

プログラムの勉強を始めたばかりのものです。
Visual Studio Community 2017 を使用して C# で Windows Form Application を勉強中です。

TextBoxを配置して、例えば下記のようにKeyDownイベントで
「Ctrl + A で文字列を全選択する」といったショートカットキーを実装すると
ツール起動時に Ctrl + A を押すと全選択されるのはうまくいきますが
ビープ音と言うのでしょうか、耳障りなシステム音も鳴ります。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.Control && e.KeyCode == Keys.A)
  {
    textBox1.SelectAll();
  }
}

こちらを止める方法はありますか?

検索もしてみたのですが、TextBoxが単一行設定の際にEnterやEscキーを押すとビープ音が鳴ることに対しての対策ばかりがヒットします。
「単一行テキストボックスでEnterやEscapeキーを押した時にビープ音が鳴らないようにする」
 http://dobon.net/vb/dotnet/control/tbsuppressbee …
こちらに書かれているように「e.Handled = true;」を追加してもビープ音は鳴りました。


こちらについて何かお分かりになる方いらっしゃいましたら
アドバイスをお願いします。m(_ _)m

A 回答 (1件)

KeyDownではSuppressKeyPressプロパティを使用。


もしくはKeyPressで判断しましょう。

KeyDownにてSuppressKeyPress=trueとした場合、KeyPressイベントは走行しなくなります。
そのことも考慮して、どちらで実装するかでしょう。

ちなみに、Multiline=falseの時は、Ctrl+Aは標準で動作し、ビープ音も鳴りません。

【KeyDownの場合】
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
// Multiline時のCtrl+A
if (textBox1.Multiline && e.KeyData == (Keys.Control | Keys.A))
{
textBox1.SelectAll();
e.SuppressKeyPress = true;
return;
}
}

【KeyPressの場合】
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Multiline時のCtrl+A
if (textBox1.Multiline && e.KeyChar == '\u0001')
{
textBox1.SelectAll();
e.Handled = true;
return;
}
}
    • good
    • 0
この回答へのお礼

naktakさん

ご回答ありがとうございます!
Multiline = True で音が鳴って困っていたのですが
教えていただいた記述で音が鳴らなくなりました‥!

とても助かりました。。

お礼日時:2017/11/08 01:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています