DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB2008 ExpressEd 異なるDataGridView間でのDropについて

環境/言語:[WinXP SP3 : VB2008 Ex : Framework3.5]
分類:[.NET]

初めて投稿します。

今VB2008 ExpressEd Framework3.5でプログラムの開発をしてます。
未熟者なりにがんばってはいるつもりですが、なかなか新しい事となると上手くいかないことが多いです。。。

今困っていることは、異なるDataGridView間(A,Bとします)でのドラッグ処理で、AからBへ値は渡せるのですがBの行位置が取得できない状態です。
ロジックは、

Private Sub dgv_B_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles dgv_B.DragDrop
If e.Data.GetDataPresent(GetType(String)) Then
'ドロップされたデータ(string型)を取得
Dim strTargetName As String = (e.Data.GetData(GetType(String))).ToString
End If
Dim hti As DataGridView.HitTestInfo = dgv_B.HitTest(e.X, e.Y)
'座標データから部屋番号セルの取得
_strNo = dgv_B.Item(0, hti.RowIndex).Value.ToString
End Sub

と、まだ開発途中ですが記述しています。
「strTargetName 」にAからの値は渡ってきています。
しかし、「_strNo = dgv_B.Item(0, hti.RowIndex).Value.ToString 」の「hti.RowIndex 」に-1が入ってしまうのです。
私の予想だと、Dropした行のRowIndexが入ってくると思ってるのですが・・・。
なぜ-1が入るのかがわかりません。
そもそもの考え方が違っているのでしょうか。

どなたかご教授下さい。
よろしくお願い致します。

ちなみに、AからBへのドラッグの方法はこの掲示板を読んで参考にしました。
DragEventArgsのXとYは画面座標ですが、HitTestInfoメソッドに渡す座標はクライアント座標(DataGridView上の座標)です。ですので、画面座標をクライアント座標に変換する必要があります。そのためには、DataGridViewのPointToClientメソッドを使ってください。
■No26357に返信(管理人さんの記事)
> DragEventArgsのXとYは画面座標ですが、HitTestInfoメソッドに渡す座標はクライアント座標(DataGridView上の座標)です。ですので、画面座標をクライアント座標に変換する必要があります。そのためには、DataGridViewのPointToClientメソッドを使ってください。
管理人様自らのご回答ありがとうございます!
目的の内容を取得する事ができました!
感動です@
ありがとうございます!

最初、掲示板の回答者?に「管理人」とあったので、マルチポストで怒られる!?
と思ってしまいましたw

凄く助かりました!
ホントにありがとうございました。
また何かあれば最終手段として投稿させてください^^
解決済み!
> 最初、掲示板の回答者?に「管理人」とあったので、マルチポストで怒られる!?
> と思ってしまいましたw

驚かせてしまい、申し訳ありませんでした。今までずっと「管理人」という名前だけを使っていましたので気がつきませんでしたが、言われてみますと、確かに名前を分けて使うことも検討すべきかなという気もしてきました。

また何かございましたら、よろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板