DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォーカス移動時のビープ音

環境/言語:[Windows2000・XP C#]
分類:[.NET]

お世話になります。

VS2003 C#にてWindowsアプリケーションを作成しております。
フォーム上にテキストボックスを2つ(AとB)設け、テキストAに
フォーカスがある時、KeyDownイベントでEnterキーが押下された
場合はテキストBにフォーカスを移す処理を作成したのですが
フォーカス遷移の際にビープ音がなってしまうようです。。

if( e.KeyCode == Keys.Enter )
{
this.FindForm().SelectNextControl(textBox1,true,true,true,false);
}

又は

if( e.KeyCode == Keys.Enter )
{
SendKeys.SendWait("+{Alt}+{TAB}");
}

どちらの場合でも同じ結果になります。
次TabIndexのコントロールにフォーカスを移す場合はビープ音が
鳴ってしまうものなのでしょうか?

宜しくお願いします
こんにちは。antです。

> フォーカス遷移の際にビープ音がなってしまうようです。。

そのビープ音は一行入力のテキストボックスでEnterキー
を押した際に鳴るものです。従って、ビープ音を鳴らすことなく
フォーカスを遷移させるためには、テキストボックでEnterキー
が処理される以前つまり、プリプロセスの段階で遷移させなければ
ならないということです。

通常はProcessCmdKeyなどをオーバーライドすればいいと思います。
こんにちは、じゃんぬ です。
ant さん、お世話になっております。

■No12853に返信(antさんの記事)
> フォーカスを遷移させるためには、テキストボックでEnterキー
> が処理される以前つまり、プリプロセスの段階で遷移させなければ
> ならないということです。
> 通常はProcessCmdKeyなどをオーバーライドすればいいと思います。

なるべくオーバーライドは使用しないに限りますよね。
Beep 音が鳴るのは、
 ProcessCmdKey -> ... -> ProcessDialogKey -> ... -> KeyDown -> KeyPress
この後です。
つまりは、KeyPress イベントでキー処理を終了したことにすれば良いのです。

Enter によるフォーカス遷移はこちらを参照してください。

  フォームで [Enter] キーが押された時にフォーカスを遷移させる
  http://jeanne.wankuma.com/tips/form/27-cobolerform.html

# こういうフォーカス遷移は Windows の標準から外れるのでお勧めしません。
これは、じゃんぬねっとさんご指摘有難うございます。

> なるべくオーバーライドは使用しないに限りますよね。
>  ProcessCmdKey -> ... -> ProcessDialogKey -> ... -> KeyDown -> KeyPress
> この後です。
> つまりは、KeyPress イベントでキー処理を終了したことにすれば良いのです。

確かにそうなんですが、何か妙なところで遠回りしている
気がするので、ProcessCmdKeyを…と書いた次第です。(^^;

> # こういうフォーカス遷移は Windows の標準から外れるのでお勧めしません。

まったくもって、その通りです。
こんにちは、じゃんぬ です。

■No12859に返信(antさんの記事)
> 確かにそうなんですが、何か妙なところで遠回りしている
> 気がするので、ProcessCmdKeyを…と書いた次第です。(^^;

気持ちはわかります、ムダを失くすことは有用なことです。

今回、返す値によって以後のキー関係のイベントは発生すらしないことが問題かと思います。
別の場所でキーを取得していたら、影響範囲ってどうなると思います?
(あんまりないとは思いますが...)

イベント レベルでない部分でインターセプトしてしまうと、
通常の動作との差異 (つまり、キーイベントすら発生しない) により、
混乱を招く、なんていうことはグループ開発ではザラにあります。

VB7, C#1.0 以降が NotOverridable がデフォルトである理由を考えてみませんか?
Java は Overridable がデフォルトでした。
ほとんどのメソッドに final をつけなければならなかったわけです。

どうでしょう? 色んな考え方はできますが...
こんにちは。

> 今回、返す値によって以後のキー関係のイベントは発生すらしないことが問題か
・・・・・
> どうでしょう? 色んな考え方はできますが...

確かに、一般的にはその通りだと思います。
大変勉強になりました。有難うございました。
これからもご指導よろしくお願いします。<(_ _)>

また、質問者の方を置いて話を進めてしまって、
申し訳ありませんでした。<(_ _)>

DOBON.NET | プログラミング道 | プログラミング掲示板