VB2008ですが、以下のようなことをやりたいと思っています。
・リストボックスより、値を選択(複数選択可にする)
・それをテキストボックスのところまでドラッグドロップする。
・そのテキストボックスのカーソルのあるところに値を貼り付ける。
リストボックスで選択した値が複数ある場合は、カンマ区切りで貼り付ける。
これは可能でしょうか?
よろしくお願いします。
可能です。
ありがとうございます。
では、具体的にはどのように設定をすればよいでしょうか?
よろしくお願いします。
参考までに。
渡す側
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.dodragdrop(VS.80).aspx
渡される側
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.dragenter(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.dragdrop(VS.80).aspx
とりあえず、自分で解決した点を書きます。
・リストボックスのMouseDownイベントで、左クリック時にIndexFromPoint(e.X, e.Y)で選択されているindexを調べる。
(indexがマイナス値ならば処理を抜ける)
・DoDragDropメソッドで、ドラッグの内容を設定する。
その後、テキストボックスにドロップなのですが、テキストボックス上にドラッグしたときに、テキストボックス上にカーソルを表示させ、ドロップ時にカーソルの後ろに値をドロップしたいのですが、どうすればよいのでしょうか?
よろしくお願いします。
つhttp://msdn.microsoft.com/ja-jp/library/system.windows.controls.textbox.selectionstart.aspx
あさん、ありがとうございます。
リストボックスからリストボックスへのドラッグアンドドロップについて、以下に参考がありましたので、ドラッグするところまでは何とかできました。
http://dobon.net/vb/dotnet/control/draganddrop.html
ただ、テキストボックスにドロップするとき、
・ドラッグしたものをテキストボックス上に持ってきたとき、テキストボックスにカーソルを表示させるようにしたい。
・テキストボックス上にドロップを行ったとき、上記で表示したカーソルの後ろにドラッグした内容を挿入したい
ということをやりたいのです。
テキストボックスではカーソルの表示は無理でしょうか?
また、ドロップする位置を取得するため、ドロップしたいテキストボックスのDragDropイベントで
pointDrop = TextBox1.PointToClient(New Point(e.X, e.Y))
intPoint = TextBox1.GetCharIndexFromPosition(pointDrop)
としてintPointをドロップする位置として取得してみましたが、テキストボックスに文字が入力されている場合、
最初の文字の手前でドロップ→intPoint=0
2文字目の手前でドロップ→intPoint=1
3文字目の手前でドロップ→intPoint=2
・
・
・
となるのですが、最後の文字の手前と、最後の文字の後ろ(文字列最後より右側)でドロップを行うと、いずれもintPointは文字列の文字数-1となってしまいます。
最後の文字の後ろでドロップした場合は、最後の文字の前でドロップしたときの値より1大きい数値を得たいのですが、どのようにすればよいでしょうか?
あるいは、方法が間違っているでしょうか?
よろしくお願いします。
ツイート | ![]() |