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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.68226 の関連記事表示

<< 0 >>
■68226  グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 -(2013/10/02(Wed) 13:05:08)
>

    分類:[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回のマウスクリックでドロップダウンリストが表示されるのですが、
    この様なタブ移動を行うには、どのような処理にすればよいでしょうか?

    よろしくお願いします。
親記事 /過去ログ116より / 関連記事表示
削除チェック/

■68231  Re[1]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ King -(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が毎回入れ替わる挙動になると思われますが
    良いのでしょうか。
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68236  Re[2]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ 海犬 -(2013/10/02(Wed) 17:40:29)
>
    No68231 (King さん) に返信

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


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

    →最後にフォーカスが当たっていたコントロールを調べたいので、上記のとおりの操作ですと、
    毎回入れ替わる挙動で間違いありません。
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68237  Re[3]: グループボック内のコンボボックスのフォーカスのあて方について
□投稿者/ 海犬 -(2013/10/02(Wed) 18:03:28)
>
    TabIndexプロパティで制御する方法を検証してみました。

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

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

    引き続き、TabStopプロパティで制御する方法で制御する方法を検証いたします。
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68238  Re[1]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 魔界の仮面弁士 -(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 では、矢印キーで移動できますが)
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68239  Re[2]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 -(2013/10/02(Wed) 19:36:05)
>
    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にフォーカスが当たって欲しいです。
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68242  Re[3]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 魔界の仮面弁士 -(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)
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68245  Re[4]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 -(2013/10/03(Thu) 19:56:51)
>
    No68242 (魔界の仮面弁士 さん) に返信

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

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

    →おっしゃる通りです。タブキー移動の2順目になった場合、ComboBox1にはフォーカスはあたりません。
記事No.68226 のレス /過去ログ116より / 関連記事表示
削除チェック/

■68268  Re[5]: グループボックス内のコンボボックスのフォーカスのあて方
□投稿者/ 海犬 -(2013/10/04(Fri) 14:42:27)
>
    2013/10/04(Fri) 14:44:38 編集(投稿者)

    本件、魔界の仮面弁士 さんの返信(■No68242)で解決しました。
    ありがとうございました。
記事No.68226 のレス / END /過去ログ116より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -