ツリービューで困っています。
やりたいことは、クリックしたノードの頭1桁目が "J"ならば
ドラッグ&ドロップしたいのですが、思うようにいきません。
下記のコードで問題点は、
①クリック(マウスの左を押下)してからもう一度左をおしつつマウスを
動かすと旨くいくのですが、左を押して動かすと、☆の一で「オブジェクト変数または
With ブロック変数が設定されていません。」のエラーが発生する
②たまに、選択している項目と異なる項目へカーソルが飛ぶ。
全体的に動きが不安定なのですが、どのようにしたらよいのかわかりません。
どうぞよろしくお願いいたします。
=======================================================================
Private Sub trvTreeS_MouseDown(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Set trvTreeS.DropHighlight = trvTreeS.HitTest(x, y)
If Button = vbLeftButton Then
'選択された値(移動対象)の退避
Set obDragNode = trvTreeS.HitTest(x, y)
End If
End Sub
======================
Private Sub trvTreeS_MouseMove(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim wDrag As String
If Button = vbLeftButton Then
☆ Set trvTreeS.DropHighlight = trvTreeS.HitTest(x, y)
wDrag = trvTreeS.HitTest(x, y).Key
If Left(wDrag, 1) = "J" Then
'アイコンの作成
trvTreeS.DragIcon = trvTreeS.HitTest(x, y).CreateDragImage
'ドラッグ開始
bDrag = True
trvTreeS.Drag vbBeginDrag
End If
End If
End Sub
開発環境が書かれていませんが、ソースコードから[VB6.0]と判断
して回答します。
1:
>オブジェクト変数または With ブロック変数が設定されていません。
ヘルプでエラーメッセージを検索すれば原因が書いてあります。
変数を設定することなくオブジェクトを参照すると Nothing となります。
まずはヘルプで HitTest メソッドの[解説]を読むことです。
>指定した座標にオブジェクトが存在しない場合、HitTest メソッドは Nothing を返します。
その時の処理が考えられていません。
2:
>選択している項目と異なる
MouseDown イベント内の以下の処理で
> '選択された値(移動対象)の退避
> Set obDragNode = trvTreeS.HitTest(x, y)
グローバル変数(?)に退避された Node が MouseMove イベント内で
使われていないので示されたコードでは MouseDown イベント内で
クリックされた Node は移動対象とは何の関係もありません。
選択したと思ってるだけではプログラムは動きません。
また、.SelectedItem と .DropHighlight の対象が違うのでは?
反転表示と Node の選択は動作が別なので確認して下さい。これも
ヘルプに書いてありますが .DropHighlight へ Nothing を設定
すると .DropHighlight の解除を意味します。場合によっては
.SelectedItem に自動で移動します。
3:
>全体的に動きが不安定なのですが、どのようにしたらよいのかわかりません。
それぞれのプロパティやメソッド操作での動作がどのようなものか
把握してないのですから当然です。ヘルプを読み、1つ1つテスト
プログラムを作って個別に動作を理解して下さい。プログラムは
作った通りにしか動きません。TreeView コントロールの作成者が
書いたプログラム通りの動作しか TreeView は受け付けてくれないのです。
特攻隊長まるるう様
全くの勉強不足ですね。
おっしゃることを理解しつつ、落ち着いて作成すれば
出来ました。
出来てしまうと自分の出した質問がとても恥ずかしい
ものだと気づきました。
にもかかわらず、ご丁寧な指導をしてくださり、
ありがとうございました。
落ち着いてプログラミングするよう心がけます。
ツイート | ![]() |