オプションボタンについて


テンテン  2003-07-28 17:41:25  No: 78805

まず環境はvb6.0  windows2000pro sp4 
状況は formに  フレームをセットしてその中にオプションボタンを2つ
配置しました。
この状況で実行して矢印ボタンで移動しなくする方法はあるのでしょうか?

どうか御指南して頂けると恐縮です。


nanashi  2003-07-28 20:07:09  No: 78806

片方のオプションボタンを別コンテナに入れる、くらいしか思い付きません。
ただし、こうすると2つのオプションボタンは別グループになるので
Clickイベントで各オプションボタンのValueを自力で制御しないといけません。


ぬけさく  2003-07-28 21:53:16  No: 78807

KeyDownでPrg書いてみる手もありますよ。

VB6のページじゃないけど参考資料
http://homepage1.nifty.com/tsware/study/vol9/vbanote_03.htm


nanashi  2003-07-28 22:44:07  No: 78808

KeyDownイベントは起こりません。


ぬけ  2003-07-29 00:06:42  No: 78809

無責任なこと書いてすいませんでした。


イトウ  2003-07-30 20:33:06  No: 78810

…OptionButtonのKeyDownイベントをMicrosoft Office XP ProfessionalのVBAで確認しました。

VB6でできないのであれば、オプションボタンをあきらめ他の(CheckBoxとか?)に切り替えるほうがいいかもしれません。
…いざとなれば独自のオブジェクトをつくるとか。


ぢゃわ  2003-07-31 01:19:07  No: 78811

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


Say  2003-07-31 04:04:31  No: 78812

KeyDownイベントは起こりませんが、メッセージは来てますので、
サブクラス化かローカルキーフックで拾うことはできます。
ただし、カーソルキー移動は内部処理ですので、
メッセージを握りつぶしても防げませんから、
「メッセージを拾ったら移動前の状態に戻してやる」
処理が必要です。

手っ取り早いのは、

●Optionボタンをコントロール配列にする。
●LostFocusイベントでIndexを保存。
●サブクラス化かローカルキーフックでメッセージをチェック。
●メッセージが「Optionボタンに対するカーソルキー」だったら
  フラグをたてる。
●Optionボタンのクリックイベントで、フラグがたっていたら
  フラグをおろし、
  Indexを保存していたOptionボタンにSetFocusし、
  そのOptionボタンのValueをTrueにする。

というところでしょう。(あまり手っ取り早くないような・・・)

個人的見解としては、(技術的には面白いのですが)
こういう手間をかけるより、
「カーソルキー移動を禁止する」という仕様のほうを
見直したいところです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加