TreeViewで、チェックをキャンセルする方法について

解決


OssA  2003-09-04 23:38:13  No: 79290

はじめまして。 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に戻って
しまいます。
他に何か設定しなければならない箇所があるのでしょうか?

よろしくお願いします。


oku  URL  2003-09-05 10:14:22  No: 79291

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
一瞬チェックが付きますがすぐにオフになります。
こんな感じでどうでしょう?


OssA  2003-09-05 19:27:43  No: 79292

NodeCheckイベントでは、やはりうまくいかないのですね。
早速、アドバイスいただいたロジックで、試してみようと
思います。

okuさん、ありがとうございました!


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

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






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