C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: AcceptButtonが作用しない場合がある


(過去ログ 106 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■63132 / inTopicNo.1)  AcceptButtonが作用しない場合がある
  
□投稿者/ へそ (1回)-(2012/07/23(Mon) 18:04:05)

分類:[C#] 

フォームにボタンが3個あります。仮にボタン1、2、3とします。
あらかじめAcceptButtonにボタン1を設定してあるのですが
フォーカスがボタン1以外(2か3)にある状態でEnterキーを押すと
フォーカスされてるボタンのイベントが動いてしまい期待するボタン1は
動いてくれないのでし。
作り方がまずいのでしょうか教えてください。
ためしに、フォームにテキストボックスを加え、そこにフォーカスさせれば
期待した動作をします。
Visual Studio 2010
解決済み
引用返信 編集キー/
■63134 / inTopicNo.2)  Re[1]: AcceptButtonが作用しない場合がある
□投稿者/ 納豆 (1回)-(2012/07/23(Mon) 19:41:19)
こんにちわ。

単純に、フォーカスされないようにしてみてはどうでしょう?

button1.TabStop = false;
button2.TabStop = false;
button3.TabStop = false;

みたいに。

引用返信 編集キー/
■63135 / inTopicNo.3)  Re[1]: AcceptButtonが作用しない場合がある
□投稿者/ Azulean (3回)-(2012/07/23(Mon) 22:36:11)
No63132 (へそ さん) に返信
> あらかじめAcceptButtonにボタン1を設定してあるのですが
> フォーカスがボタン1以外(2か3)にある状態でEnterキーを押すと
> フォーカスされてるボタンのイベントが動いてしまい期待するボタン1は
> 動いてくれないのでし。
> 作り方がまずいのでしょうか教えてください。

残念ながら、そういうものです。
エクスプローラーなどでも実験するとわかりますが、デフォルトのボタン(AcceptButton 相当)に対して、違うボタンにフォーカスを当てると、フォーカスがあるボタンが優先されます。

Windows としてそのように統一されているので、変に動きを変えない方がよいと思いますよ。
理由としては大変なのと、ユーザーにとっては一つの OS の中で動きが違うものがいることで混乱するためです。
引用返信 編集キー/
■63136 / inTopicNo.4)  Re[2]: AcceptButtonが作用しない場合がある
□投稿者/ へそ (2回)-(2012/07/24(Tue) 10:21:08)
No63135 (Azulean さん) に返信

> 残念ながら、そういうものです。
> エクスプローラーなどでも実験するとわかりますが、デフォルトのボタン(AcceptButton 相当)に対して、違うボタンにフォーカスを当てると、フォーカスがあるボタンが優先されます。
>
> Windows としてそのように統一されているので、変に動きを変えない方がよいと思いますよ。
> 理由としては大変なのと、ユーザーにとっては一つの OS の中で動きが違うものがいることで混乱するためです。

ご指摘のように Enterの動きは変えない方がよい気がしてきました。
思い返すと タブキーでフォーカスさせてEnterで実行 といった操作は自分でも多用していました。
混乱してしまいますよね。
Enter以外のキーを目的のボタンに割り当てる方向で仕様を見直すことにします。
どうもありがとうございました。

引用返信 編集キー/
■63137 / inTopicNo.5)  Re[2]: AcceptButtonが作用しない場合がある
□投稿者/ へそ (3回)-(2012/07/24(Tue) 10:34:41)
No63134 (納豆 さん) に返信

どうもありがとうございました。
直前の返信でEnterは用いないことにする旨回答しましたが
一応ご提案くださった内容を試してみました。

> button1.TabStop = false;
> button2.TabStop = false;
> button3.TabStop = false;

上記のようにしたところ(TABキーでは)フォーカス移動がされなくなり
Enterを押すとボタン1のイベントが動くようになりました。

ただ TABの代わりに 矢印キーやマウスを用いるとフォーカス移動
できてしまうので 当初方針で進めるのであればこれらの対策も必要そうです。
これについては今後機会があれば調べてみようと思います。

どうもありがとうございました。

解決済み
引用返信 編集キー/
■63138 / inTopicNo.6)  Re[3]: AcceptButtonが作用しない場合がある
□投稿者/ shu (7回)-(2012/07/24(Tue) 10:59:21)
No63136 (へそ さん) に返信

無理やりEnter押下をButton1のクリックに割り当ててしまうなら
以下のようにすれば出来ないこともありません。推奨はしません。

    Protected Overrides Function ProcessDialogKey(keyData As System.Windows.Forms.Keys) As Boolean
        If keyData = Keys.Enter Then
            Button1.PerformClick()
            Return True
        Else
            Return MyBase.ProcessDialogKey(keyData)
        End If
    End Function

解決済み
引用返信 編集キー/
■63142 / inTopicNo.7)  Re[4]: AcceptButtonが作用しない場合がある
□投稿者/ へそ (4回)-(2012/07/25(Wed) 11:19:33)
No63138 (shu さん) に返信

> 以下のようにすれば出来ないこともありません。推奨はしません。
> 
>     Protected Overrides Function ProcessDialogKey(keyData As System.Windows.Forms.Keys) As Boolean
>         If keyData = Keys.Enter Then
>             Button1.PerformClick()
>             Return True
>         Else
>             Return MyBase.ProcessDialogKey(keyData)
>         End If
>     End Function

ありがとうございます。
動作確認はまだできておりませんが処理内容は概ね理解しました。
今後 利用させていただく機会があるかもしれません。
お世話になりました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -