まず環境はvb6.0 windows2000pro sp4
状況は formに フレームをセットしてその中にオプションボタンを2つ
配置しました。
この状況で実行して矢印ボタンで移動しなくする方法はあるのでしょうか?
どうか御指南して頂けると恐縮です。
片方のオプションボタンを別コンテナに入れる、くらいしか思い付きません。
ただし、こうすると2つのオプションボタンは別グループになるので
Clickイベントで各オプションボタンのValueを自力で制御しないといけません。
KeyDownでPrg書いてみる手もありますよ。
VB6のページじゃないけど参考資料
http://homepage1.nifty.com/tsware/study/vol9/vbanote_03.htm
KeyDownイベントは起こりません。
無責任なこと書いてすいませんでした。
…OptionButtonのKeyDownイベントをMicrosoft Office XP ProfessionalのVBAで確認しました。
VB6でできないのであれば、オプションボタンをあきらめ他の(CheckBoxとか?)に切り替えるほうがいいかもしれません。
…いざとなれば独自のオブジェクトをつくるとか。
nanashiさんのいうとおり、KeyDownとかKeyPressとかは使えないので、
カーソル移動させない方法は別コンテナに入れるくらいしかないですね。
Frameの中にもうひとつCaptionなし枠なしのFrameを作って、片方の
オプションボタンはそのFrame内に入れればそれっぽく見えます。
ちなみに、別Frameに入っていても、双方のオプションボタンの
オブジェクト名を同じものにして、それぞれにIndexを振り、
下記のように手動でValue制御さえしてあげれば、あとは普通の
オプションボタンとそう変わらない使い勝手になると思います。
Private Sub Option1_Click(Index As Integer)
For i = 0 To Option1.UBound
If i = Index Then
Option1(i).value = True
Else
Option1(i).value = False
End If
Next
End Sub
KeyDownイベントは起こりませんが、メッセージは来てますので、
サブクラス化かローカルキーフックで拾うことはできます。
ただし、カーソルキー移動は内部処理ですので、
メッセージを握りつぶしても防げませんから、
「メッセージを拾ったら移動前の状態に戻してやる」
処理が必要です。
手っ取り早いのは、
●Optionボタンをコントロール配列にする。
●LostFocusイベントでIndexを保存。
●サブクラス化かローカルキーフックでメッセージをチェック。
●メッセージが「Optionボタンに対するカーソルキー」だったら
フラグをたてる。
●Optionボタンのクリックイベントで、フラグがたっていたら
フラグをおろし、
Indexを保存していたOptionボタンにSetFocusし、
そのOptionボタンのValueをTrueにする。
というところでしょう。(あまり手っ取り早くないような・・・)
個人的見解としては、(技術的には面白いのですが)
こういう手間をかけるより、
「カーソルキー移動を禁止する」という仕様のほうを
見直したいところです。
ツイート | ![]() |