CheckBoxについて

解決


snow  2003-01-09 20:38:30  No: 105808

CheckBoxのValueについて質問があります。
CheckBoxをクリックしたときにValueを0(未チェック)
または2(無効)にすると、再帰的な処理を
行ってしまいます。
なぜでしょうか?よろしくお願いします。

Private Sub Check1_Click()  ←—
    Check1.Value = 0        ——↑  こんな感じにです。
End Sub


ファリンファリン  2003-01-09 20:56:57  No: 105809

チェックボックスのクリックイベントは、Valueの値が変更された時に起こるようです。
ですので、実際操作者がクリックいていないとしても、コード中に変更がかかれば、イベントが起きます。
チェックボックスのクリックイベント内に同チェックボックスの値を変えるコードは書かない方が得策です。


ファリンファリン  2003-01-09 21:11:44  No: 105810

追記です。
>Private Sub Check1_Click()  ←—
>    Check1.Value = 0        ——↑  こんな感じにです。
>End Sub

デバッグ実行をすると御分かりになるかと思いますが、再帰的な処理は多分一回だけ行われるでしょう。

Valueを2などに変更した際クリックイベントが発生します。
      ↓
クリックイベント中にValueを0にするコードが書いてあります。
      ↓
すると再度、クリックイベントが発生します。
      ↓
クリックイベント中にValueを0にするコードが書いてありますが、既に0なので変
更がかからない。つまりクリックイベントは発生しない。

よって、1度だけ再帰的処理が行われると推測できます。


snow  2003-01-09 22:04:45  No: 105811

CommandButtonの変わりにCheckBoxを使おうと
したのですが、無理のようですね。
Valueを使わずに、CheckBoxを未チェックに
する方法はあるのでしょうか?


ファリンファリン  2003-01-09 22:44:28  No: 105812

>Valueを使わずに、CheckBoxを未チェックに
>する方法はあるのでしょうか?

さすがにチェック有り無しの状態を表すプロパティーがValueなので、それを使わずに状態を変える方法はないのでは?

>CommandButtonの変わりにCheckBoxを使おうと
>したのですが、無理のようですね。

↑の文だけではどうしてCheckBoxのClickイベントに同CheckBox.Value = 0のコードを書かなくてはならないのか?及び、何をしたいのか私(だけ?)にはちょっと分かりません。
教えてもらえると、他の解決策が見つかるかもです。

これは想像ですが、CheckBoxの様な「白いくぼんだ3Dのグラフィックだけどレ点の印は付けたく無い」だけであるならば、ちょっと邪道ではありますが
Lableコントロールを使い、プロパティーを以下の通りにして大きさをCheckBoxと同じにすればいいとおもいます。LabelにもClickイベントがありますから・・・。

プロパティー
3D:Label.Appearance = 1
実線:Label.BorderStyle = 1
白色:Label.BackColor = &H80000005
縦幅:Label.Height = 200
横幅:Label.Width = 200


snow  2003-01-09 22:53:50  No: 105813

CheckBoxを使った理由は、ボタンのBackColorと
ForeColorを使いたかったためで。
動作としてはCommandButtonのように使いたかったためです。
Labelはボタンがくぼんだ状態ですし。


ファリンファリン  2003-01-09 23:13:35  No: 105814

なるほど、要するに■部分だけでなくその周りの部分も必要と言うことですね?
であるならば、私もLableにこだわるわけではありませんが
二つのLableを重ねるというのはどうですか?
先程作った■LableとBackColorやForeColorを指定したCaption用Lableを重ねるわけです。
CheckBoxのClickイベントの有効(反応)範囲からすると、■部分とCaption部分の両方ですので、どちらのコントロールをクリックされても同じイベント等(Sub・Function)を実行するように組めばいいのではないでしょうか?

他にいいコントロールがあるかも知れませんが、あいにく知りませんので^^;


takk  2003-01-09 23:15:11  No: 105815

ようはClickイベント内でValue値を変更した時に再起呼出しされるClickイベントをキャンセルできれば良いんですよね?

こんな感じでいかがでしょうか?

Private Sub Check1_Click()
    Static bNowClick As Boolean
    
    If bNowClick Then Exit Sub
    
    bNowClick = True
    
    Check1.Value = 0
    Debug.Print 1
    
    bNowClick = False
End Sub


ファリンファリン  2003-01-09 23:19:51  No: 105816

ラベルの綴りが結構間違えていました^^;
「Label」です。すみません。


snow  2003-01-09 23:30:05  No: 105817

ファリンファリンさん、takkさん
ありがとうございました。
再帰呼び出しをキャンセル方法で
動作することができました。


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

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






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