CheckBoxのValueについて質問があります。
CheckBoxをクリックしたときにValueを0(未チェック)
または2(無効)にすると、再帰的な処理を
行ってしまいます。
なぜでしょうか?よろしくお願いします。
Private Sub Check1_Click() ←—
Check1.Value = 0 ——↑ こんな感じにです。
End Sub
チェックボックスのクリックイベントは、Valueの値が変更された時に起こるようです。
ですので、実際操作者がクリックいていないとしても、コード中に変更がかかれば、イベントが起きます。
チェックボックスのクリックイベント内に同チェックボックスの値を変えるコードは書かない方が得策です。
追記です。
>Private Sub Check1_Click() ←—
> Check1.Value = 0 ——↑ こんな感じにです。
>End Sub
デバッグ実行をすると御分かりになるかと思いますが、再帰的な処理は多分一回だけ行われるでしょう。
Valueを2などに変更した際クリックイベントが発生します。
↓
クリックイベント中にValueを0にするコードが書いてあります。
↓
すると再度、クリックイベントが発生します。
↓
クリックイベント中にValueを0にするコードが書いてありますが、既に0なので変
更がかからない。つまりクリックイベントは発生しない。
よって、1度だけ再帰的処理が行われると推測できます。
CommandButtonの変わりにCheckBoxを使おうと
したのですが、無理のようですね。
Valueを使わずに、CheckBoxを未チェックに
する方法はあるのでしょうか?
>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
CheckBoxを使った理由は、ボタンのBackColorと
ForeColorを使いたかったためで。
動作としてはCommandButtonのように使いたかったためです。
Labelはボタンがくぼんだ状態ですし。
なるほど、要するに■部分だけでなくその周りの部分も必要と言うことですね?
であるならば、私もLableにこだわるわけではありませんが
二つのLableを重ねるというのはどうですか?
先程作った■LableとBackColorやForeColorを指定したCaption用Lableを重ねるわけです。
CheckBoxのClickイベントの有効(反応)範囲からすると、■部分とCaption部分の両方ですので、どちらのコントロールをクリックされても同じイベント等(Sub・Function)を実行するように組めばいいのではないでしょうか?
他にいいコントロールがあるかも知れませんが、あいにく知りませんので^^;
ようは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
ラベルの綴りが結構間違えていました^^;
「Label」です。すみません。
ファリンファリンさん、takkさん
ありがとうございました。
再帰呼び出しをキャンセル方法で
動作することができました。
ツイート | ![]() |