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

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

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

Re[5]: グループボックス内のコンボボックスのフォーカスのあて方


(過去ログ 116 を表示中)

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

■68226 / inTopicNo.1)  グループボックス内のコンボボックスのフォーカスのあて方
  
□投稿者/ 海犬 (6回)-(2013/10/02(Wed) 13:05:08)
海犬 さんの Web サイト

分類:[VB.NET/VB2005 以降] 

2013/10/02(Wed) 18:08:50 編集(投稿者)
2013/10/02(Wed) 18:07:43 編集(投稿者)

いつもお世話になっています。VB2010で開発しています。

グループボックス内に2つのコンボボックスを配置し、
フォーカスが当たっていた方のコンボボックスを記憶しておき、
次にそのグループボックスにタブ移動でフォーカスが来た場合、
記憶されている方のコンボボックスに始めにフォーカスをあてる、
という処理を行いたいと思っております。

以下のようなコードを書いております。デザイナーにはグループボックスからフォーカスを外せるように
テキストボックスを1つ置いています。

Public Class Form1

    Private NO As Integer = 0

    Private Sub ComboBox1_Enter(sender As Object, e As System.EventArgs) Handles ComboBox1.Enter
        NO = 1
    End Sub

    Private Sub ComboBox2_Enter(sender As Object, e As System.EventArgs) Handles ComboBox2.Enter
        NO = 2
    End Sub

    Private Sub GroupBox1_Enter(sender As Object, e As System.EventArgs) Handles GroupBox1.Enter
        Select Case NO
            Case 1 : ComboBox1.Focus()
            Case 2 : ComboBox2.Focus()
        End Select
    End Sub

End Class


この状態ですと、テキストボックスにフォーカスがある場合、
変数NOの対象でない方のコンボボックスのドロップダウンリストを
1回のマウスクリックで、表示することができません。

GroupBox1_Enterイベントをコメントアウトすると、
1回のマウスクリックでドロップダウンリストが表示されるのですが、
この様なタブ移動を行うには、どのような処理にすればよいでしょうか?

よろしくお願いします。

引用返信 編集キー/
■68231 / inTopicNo.2)  Re[1]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ King (1回)-(2013/10/02(Wed) 14:48:37)
2013/10/02(Wed) 15:10:03 編集(投稿者)

フォーカスが当たったタイミングでTabStopプロパティを制御する方法はいかがでしょうか。

マウスで選択するとそのComboBoxのTabStop=Trueとし、
もう片方のComboBoxのTabStop=Falseとする、という方法です。

【追記】
申し訳ありません。
ちゃんと読み取れていませんでした。
「記憶されている方のコンボボックスに始めにフォーカスをあてる」
でしたね。
上記と同じタイミングでTabIndexプロパティを制御する方法ではどうでしょうか。
ただ、タブキーでその2つのComboBoxをフォーカス移動した場合は、
「フォーカスが当たっていた方のコンボボックスを記憶しておき」
という記憶するComboBoxが毎回入れ替わる挙動になると思われますが
良いのでしょうか。
引用返信 編集キー/
■68236 / inTopicNo.3)  Re[2]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ 海犬 (7回)-(2013/10/02(Wed) 17:40:29)
海犬 さんの Web サイト
No68231 (King さん) に返信

King さん、返信いただきありがとうございます。
TabStopプロパティで制御する方法、TabIndexプロパティで制御する方法、
両方で解決できるかどうか検証してみます。


> ただ、タブキーでその2つのComboBoxをフォーカス移動した場合は、
> 「フォーカスが当たっていた方のコンボボックスを記憶しておき」
> という記憶するComboBoxが毎回入れ替わる挙動になると思われますが
> 良いのでしょうか。

→最後にフォーカスが当たっていたコントロールを調べたいので、上記のとおりの操作ですと、
毎回入れ替わる挙動で間違いありません。

引用返信 編集キー/
■68237 / inTopicNo.4)  Re[3]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ 海犬 (8回)-(2013/10/02(Wed) 18:03:28)
海犬 さんの Web サイト
TabIndexプロパティで制御する方法を検証してみました。

確かにTabキーでの移動に関しては、期待通りの動作をいたしました。

ただ、Shift+Tabキーの移動が期待通りにいきませんでした。
(前提条件として記載していなくて、すみませんでした。)
Shift+Tabの場合でも、記憶されているコントロールの方にフォーカスをあてたいです。

引き続き、TabStopプロパティで制御する方法で制御する方法を検証いたします。

引用返信 編集キー/
■68238 / inTopicNo.5)  Re[1]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 魔界の仮面弁士 (359回)-(2013/10/02(Wed) 18:28:47)
2013/10/02(Wed) 18:46:53 編集(投稿者)

No68226 (海犬 さん) に返信
> デザイナーにはグループボックスからフォーカスを外せるように
> テキストボックスを1つ置いています。

前後に TextBox を置いて、

├TextBox1 (TabIndex=0)
├GroupBox1 (TabIndex=1)
│├ComboBox1 (TabIndex=0)
│└ComboBox2 (TabIndex=1)
└TextBox2 (TabIndex=1)

のような構成だと仮定しておきます。


この場合、TextBox1 にフォーカスがある状態で Tab を押した場合は
 ・前回フォーカスがあった方の ComboBox にフォーカスが移る
という動作にしたいのだということは分かりました。

では、TextBox2 にフォーカスがある状態で Shift+Tab を押した場合は
 (a) 前回フォーカスがあった方の ComboBox にフォーカスが移る
 (b) 前回フォーカスが無かった方の ComboBox にフォーカスが移る
 (c) 常に ComboBox2 にフォーカスが移る
のいずれになって欲しいのでしょうか?



また、GroupBox 内での動作も読み取れませんでした。
------------------------------------------
ComboBox1 にフォーカスがある状態で Tab を押した場合はどうなりますか?
 (1) ComboBox2 にフォーカスが移る
 (2) フォーカスは移動しない
 (3) GroupBox1 の次(TextBox2)にフォーカスが移る

ComboBox2 にフォーカスがある状態で Tab を押した場合はどうなりますか?
 (1) ComboBox1 にフォーカスが移る
 (2) フォーカスは移動しない
 (3) GroupBox1 の次(TextBox2)にフォーカスが移る

ComboBox1 にフォーカスがある状態で Shift+Tab を押した場合はどうなりますか?
 (1) GroupBox1 の前(TextBox1)にフォーカスが移る
 (2) フォーカスは移動しない
 (3) ComboBox2 にフォーカスが移る

ComboBox2 にフォーカスがある状態で Shift+Tab を押した場合はどうなりますか?
 (1) GroupBox1 の前(TextBox1)にフォーカスが移る
 (2) フォーカスは移動しない
 (3) ComboBox1 にフォーカスが移る
------------------------------------------

通常の画面構成では、上記は (1), (3), (1), (3) のように動くと思いますが、
GroupBox 内ではそれを踏襲しておき、GroupBox の外から移動してきたときのみ、
前回の ComboBox に入って欲しい…ということなのでしょうか。


これが ComboBox ではなく、RadioButton だった場合には、
上記は (3), (3), (1), (1) になるのでしょうけれども、その場合、
ComboBox 間の移動をキーボード操作で行えなくなってしまいますね。
(RadioButton では、矢印キーで移動できますが)
引用返信 編集キー/
■68239 / inTopicNo.6)  Re[2]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 (9回)-(2013/10/02(Wed) 19:36:05)
海犬 さんの Web サイト
2013/10/02(Wed) 19:39:27 編集(投稿者)

No68238 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん、返信いただきありがとうございます。
また挙動の詳細を書いていただきまして、ご面倒をお掛けします。
以下に回答いたします。

> では、TextBox2 にフォーカスがある状態で Shift+Tab を押した場合は
>  (a) 前回フォーカスがあった方の ComboBox にフォーカスが移る
>  (b) 前回フォーカスが無かった方の ComboBox にフォーカスが移る
>  (c) 常に ComboBox2 にフォーカスが移る
> のいずれになって欲しいのでしょうか?

→(a)になって欲しいです。


> 通常の画面構成では、上記は (1), (3), (1), (3) のように動くと思いますが、
> GroupBox 内ではそれを踏襲しておき、GroupBox の外から移動してきたときのみ、
> 前回の ComboBox に入って欲しい…ということなのでしょうか。

→その通りです。今件で行いたいことは、以下の2条件の場合に
フォーカスをあてるコントロールを変更することです。
・TextBox1からTabキー移動してきた時の処理(何も処理を書かなければ、TabIndexが小さい方のコンボボックスにフォーカスがあたるが、それを変更したい)
・TextBox2からShift+Tabキー移動してきた時の処理(何も処理を書かなければ、TabIndexが大きい方のコンボボックスにフォーカスがあたるが、それを変更したい)


> これが ComboBox ではなく、RadioButton だった場合には、
> 上記は (3), (3), (1), (1) になるのでしょうけれども、その場合、
> ComboBox 間の移動をキーボード操作で行えなくなってしまいますね。
> (RadioButton では、矢印キーで移動できますが)

→RadioButtonの挙動とは異なります。ComboBox1にフォーカスがある状態でTabキーを押下した場合、次はComboBox2にフォーカスが当たって欲しいです。

引用返信 編集キー/
■68242 / inTopicNo.7)  Re[3]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 魔界の仮面弁士 (361回)-(2013/10/03(Thu) 13:42:01)
No68239 (海犬 さん) に返信
> ComboBox1にフォーカスがある状態でTabキーを押下した場合、次はComboBox2にフォーカスが当たって欲しいです。

タブ順自体はそのままなのですね。
ということは、キーボード操作だけで TextBox2 に到達した場合は、
前回のコンボボックスというのは、常に ComboBox2 になるという認識で良いでしょうか。



>> この様なタブ移動を行うには、どのような処理にすればよいでしょうか?

自分がたまに使う方法なのですが、タブ移動順の制御を行うために、フォーカス制御用に
 Private WithEvents dummy1 As New System.Windows.Forms.Control() With {.Size = Size.Empty, .TabStop = True}
なコントロールを、前後の TabIndex に配置しておき、Enter イベントで制御してみるのは如何でしょうか。



イメージ的にはこんな感じ(試していません)。


Form1 … Load イベントで GroupBox1.Tag = ComboBox1

├TextBox1 (TabIndex=0)

├Dummy1 (TabIndex=1) … Enterイベントで GroupBox1.Tag.Focus()

├GroupBox1 (TabIndex=2)
││
│├Dummy2 (TabIndex=0) … Enter イベントで TextBox1.Focus()
││
│├ComboBox1 (TabIndex=1) … Enter イベントで GroupBox1.Tag = sender
│├ComboBox2 (TabIndex=2) … Enter イベントで GroupBox1.Tag = sender
││
│└Dummy3 (TabIndex=3) … Enter イベントで TextBox2.Focus()

├Dummy4 (TabIndex=3) … Enter イベントで GroupBox1.Tag.Focus()

└TextBox2 (TabIndex=4)
引用返信 編集キー/
■68245 / inTopicNo.8)  Re[4]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 (10回)-(2013/10/03(Thu) 19:56:51)
海犬 さんの Web サイト
No68242 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん、毎度アドバイスをいただきありがとうございます。

> タブ順自体はそのままなのですね。
> ということは、キーボード操作だけで TextBox2 に到達した場合は、
> 前回のコンボボックスというのは、常に ComboBox2 になるという認識で良いでしょうか。

→おっしゃる通りです。タブキー移動の2順目になった場合、ComboBox1にはフォーカスはあたりません。

引用返信 編集キー/
■68268 / inTopicNo.9)  Re[5]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 (11回)-(2013/10/04(Fri) 14:42:27)
海犬 さんの Web サイト
2013/10/04(Fri) 14:44:38 編集(投稿者)

本件、魔界の仮面弁士 さんの返信(■No68242)で解決しました。
ありがとうございました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -