- PR -

CheckBoxの非グループ化

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2005-05-16 18:38
はじめまして!!
梶(かじ)と申します。

現在、.NET C# を使ってクラサバ型のプログラムを作っているのですが、
そこで、ある問題が発生して、行き詰ってしまいました。

是非、皆様の知恵を貸して頂きたく思います。

Form に RadioButton や CheckBox を貼り付けると、
GroupBox を使用していなくても、勝手にグループ化されてしまいますよね?

RadioButton は見た目の都合上、GroupBox を明示的に使用するので問題ないのですが、
CheckBox の場合は、わざわざ CheckBox を使ったりしません。

しかし、そのまま気にせず Form に直接 CheckBox を貼り付けてしまうと
勝手にグループ化されてしまうので、CheckBox にフォーカスがある状態で
カーソルキーを押下すると、CheckBox 間でフォーカスが動いてしまいます。

この「CheckBox 間でフォーカスが動く」のを、お客さんが良く思っていなく
どうにかしてこの動きを制御したいのです。
無理やり、カーソルキーのイベントで動きを制御してみたところ
RadioButton のカーソルキーの動きまで制御されてしまい、
「あっちを立てれば、こっちが立たず」状態に陥ってしまい・・・

どなたか、CheckBoxの非グループ化の画期的なアイデアを持っていませんか?

宜しくお願い致します。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-05-16 19:09
梶さん、こんばんは。

引用:

Form に RadioButton や CheckBox を貼り付けると、
GroupBox を使用していなくても、勝手にグループ化されてしまいますよね?


えぇっ!? そんな筈は…。
っていうか、チェックボックスのグループ化って、どういう状態なんでしょう?

引用:

勝手にグループ化されてしまうので、CheckBox にフォーカスがある状態で
カーソルキーを押下すると、CheckBox 間でフォーカスが動いてしまいます。


それはもしかして、チェックボックスに限らずボタンやリンクボタン間などで、Tab キーではなく、矢印キーでもフォーカス移動できる、という事じゃありませんか?
だとしたら多分、Windowsの仕様(?)じゃないかと思いますが…。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2005-05-17 01:27
そこにコストかけますか?という点については
お客様と話をするのも一つの案だと思いますが、それはさておき。

Panelを置いてそこにCheckBoxを置く。
別のPanelを置いて、もう一方のCheckBoxを置く。
見た目は変わらずに別々のグループとして扱えます。
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2005-05-17 09:00
念のため確認してみましたが、梶さんのおっしゃるようなことは起こりませんよ。

やはり、きくちゃんさんの言うように単にタブオーダー順にフォーカスが移動しているだけのようです。

TabIndexとZオーダーを変更して、タブオーダーを変えてみることをお勧めします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-05-17 09:24
こんにちは、じゃんぬ です。

まあ、RadioButton の Checked に限ってはグループ化したような動きはしますが、
フォーカス関係は、フォームに配置するだけではグループ化しませんよね。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2005-05-17 09:43
「きくちゃん」さん。「よねKEN」さん。「rucio」さん。「じゃんぬねっと」さん。
皆さん、お返事ありがとう御座います。

グループ化と言う表現は、ちょっと適切ではなかったですね。
CheckBox や RadioButton は入力フィールドが存在しないので
カーソルキーで同一の Form、Panel、GroupBox 内部のタブ順で
フォーカスが遷移してしまいます。

RadioButton はグループを意識しているので Panel に貼り付けていますが
CheckBox はグループを意識する必要がないため、Form に直接貼り付けています。

で、RadioButton と CheckBox が同居する Form では、
CheckBox 上にフォーカスが居る状態でカーソルキーを押下すると、
当然の事ながらグループ化をしている RadioButton を飛ばして
フォーカスが遷移してしまいます。
この部分が、お客さんの「受け」の悪いところでして・・・(^^ゞ

それで
---
CheckBox 上のフォーカスがカーソルキーで動かなければ・・・
 ↓
CheckBox がグループ化されなければ動かないんじゃないか?
---
と、単純に考えた訳でして(^^ゞ

「よねKEN」さんが仰っていたように、お客さんと交渉して
手を入れる画面を絞って、Panel で対応した方が良さそうですね。

「rucio」さんが仰っていたように、zオーダーが使えるかどうかも
調べてみたいと思います。

何か他に、良いアイデア等ありましたら、是非教えて下さい!!
クワーク
会議室デビュー日: 2002/05/05
投稿数: 4
お住まい・勤務地: 東京都
投稿日時: 2005-05-22 04:05
はじめまして、久しぶりに書き込みます。

これは Win32 ダイアログだとグループ指定すればあっさり済む問題ですよね。
(手抜きじゃないのか >> MS)

.NET は始めたばかりですが ProcessDialogKey をオーバーライドしてみました。
checkBox1 限定でフォーカスを見ているので、Tag を参照するとかすれば少しはマシになるかと思います。
コントロールの親フォームで試してみて下さい。

protected override bool ProcessDialogKey(System.Windows.Forms.Keys keyData)
{
//Debug.WriteLine("ProcessDialogKey");

if (checkBox1.Focused)
{
//Debug.WriteLine("ProcessDialogKey.checkBox1.Focused");
switch (keyData)
{
case Keys.Right:
case Keys.Left:
case Keys.Down:
case Keys.Up:
return true;
break;
}
}

return base.ProcessDialogKey(keyData);
}
1

スキルアップ/キャリアアップ(JOB@IT)