- - PR -
CheckBoxの非グループ化
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-16 18:38
はじめまして!!
梶(かじ)と申します。 現在、.NET C# を使ってクラサバ型のプログラムを作っているのですが、 そこで、ある問題が発生して、行き詰ってしまいました。 是非、皆様の知恵を貸して頂きたく思います。 Form に RadioButton や CheckBox を貼り付けると、 GroupBox を使用していなくても、勝手にグループ化されてしまいますよね? RadioButton は見た目の都合上、GroupBox を明示的に使用するので問題ないのですが、 CheckBox の場合は、わざわざ CheckBox を使ったりしません。 しかし、そのまま気にせず Form に直接 CheckBox を貼り付けてしまうと 勝手にグループ化されてしまうので、CheckBox にフォーカスがある状態で カーソルキーを押下すると、CheckBox 間でフォーカスが動いてしまいます。 この「CheckBox 間でフォーカスが動く」のを、お客さんが良く思っていなく どうにかしてこの動きを制御したいのです。 無理やり、カーソルキーのイベントで動きを制御してみたところ RadioButton のカーソルキーの動きまで制御されてしまい、 「あっちを立てれば、こっちが立たず」状態に陥ってしまい・・・ どなたか、CheckBoxの非グループ化の画期的なアイデアを持っていませんか? 宜しくお願い致します。 | ||||||||
|
投稿日時: 2005-05-16 19:09
梶さん、こんばんは。
えぇっ!? そんな筈は…。 っていうか、チェックボックスのグループ化って、どういう状態なんでしょう?
それはもしかして、チェックボックスに限らずボタンやリンクボタン間などで、Tab キーではなく、矢印キーでもフォーカス移動できる、という事じゃありませんか? だとしたら多分、Windowsの仕様(?)じゃないかと思いますが…。 | ||||||||
|
投稿日時: 2005-05-17 01:27
そこにコストかけますか?という点については
お客様と話をするのも一つの案だと思いますが、それはさておき。 Panelを置いてそこにCheckBoxを置く。 別のPanelを置いて、もう一方のCheckBoxを置く。 見た目は変わらずに別々のグループとして扱えます。 | ||||||||
|
投稿日時: 2005-05-17 09:00
念のため確認してみましたが、梶さんのおっしゃるようなことは起こりませんよ。
やはり、きくちゃんさんの言うように単にタブオーダー順にフォーカスが移動しているだけのようです。 TabIndexとZオーダーを変更して、タブオーダーを変えてみることをお勧めします。 | ||||||||
|
投稿日時: 2005-05-17 09:24
こんにちは、じゃんぬ です。
まあ、RadioButton の Checked に限ってはグループ化したような動きはしますが、 フォーカス関係は、フォームに配置するだけではグループ化しませんよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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オーダーが使えるかどうかも 調べてみたいと思います。 何か他に、良いアイデア等ありましたら、是非教えて下さい!! | ||||||||
|
投稿日時: 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