はじめまして。 OssAと申します。
開発環境は、VB6SP5、Win2000です。
TreeViewコントロールで、チェックボックスを使用
しているのですが、NodeCheckイベントでチェックされたことを
検知させ、条件を満たしていない場合、チェックされたものを
はずしたいと思っています。
以下、簡単ですが私の書いたキャンセルさせるソースです。
※やりたいことは、Rootの場合のみ、チェックを付けさせないようにするです。
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
'条件1です
If Node.Children <> 0 Then
'条件2です
If Node.Checked = True Then
Node.Checked = False
Exit Sub
End If
End If
End Sub
上記のExit Subまでは、正常に動作しているように見えるのですが、
Exit Subでプロシージャーを抜けた瞬間に、CheckedがTrueに戻って
しまいます。
他に何か設定しなければならない箇所があるのでしょうか?
よろしくお願いします。
NodeCheckイベントではCheckedプロパディ塗り替えられないみたいなので、
MouseUpイベントとKeyPressイベントを併用すれば出来ました。
無条件でチェックをオフするようにしてます。
オフにしたい条件は自分で入れてください。
まずプロシージャレベルに変数を定義してください。
Private pblnCheck As Boolean 'NodeCheckされたかどうか
Private pintIndex As Integer 'NodeCheckされたインデックス
Private Sub TreeView1_KeyPress(KeyAscii As Integer)
' SPACEが押されたら
If KeyAscii = vbKeySpace Then
' NodeCheckされたら
If pblnCheck = True Then
pblnCheck = False
TreeView1.Nodes.Item(pintIndex).Checked = False
End If
End If
End Sub
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Call TreeView1_KeyPress(vbKeySpace)
End Sub
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
pblnCheck = True
pintIndex = Node.Index
End Sub
一瞬チェックが付きますがすぐにオフになります。
こんな感じでどうでしょう?
NodeCheckイベントでは、やはりうまくいかないのですね。
早速、アドバイスいただいたロジックで、試してみようと
思います。
okuさん、ありがとうございました!
ツイート | ![]() |