ドラッグ側の処理
ドラッグ側のC1TrueDBGridコントロールでは、まずMouseDownイベントハンドラでドラッグがどの行のデータの上で行われたのかを、マウスポインタの座標で把握します。そして、MouseMoveイベントハンドラでドラッグの操作を開始します。Clickイベントハンドラではマウスポインタの座標が把握できませんので、これらのイベントハンドラを利用しています。
(1)MouseDownイベントハンドラでは、C1TrueDBGridクラスのCellContainingメソッドで、マウスボタンが押された時のC1TrueDBGridコントロール上のマウスポインタの座標とグリッドの行列番号を引数の変数に格納します。
e.X, e.Yはドラッグ操作の開始点として使用し、rowはその位置の行番号として使用します。
Private StartDrag_PT As Point Private DragRowNo As Integer Private Sub C1TrueDBGrid1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseDown Dim row, col As Integer StartDrag_PT = Point.Empty DragRowNo = -1 If C1TrueDBGrid1.CellContaining(e.X, e.Y, row, col) Then ' ドラッグ操作の開始点を保存します。 StartDrag_PT = New Point(e.X, e.Y) DragRowNo = row End If End Sub
private Point StartDrag_PT; private int DragRowNo; private void c1TrueDBGrid1_MouseDown(object sender, MouseEventArgs e) { int row, col; StartDrag_PT = Point.Empty; DragRowNo = -1; if(c1TrueDBGrid1.CellContaining(e.X, e.Y, out row, out col)) { // ドラッグ操作の開始点を保存します。 StartDrag_PT = new Point(e.X, e.Y); DragRowNo = row; } }
(2)マウスポインタが動いたらドラッグが開始したと判断し、ドラッグの処理を開始します。
まず、マウスポインタの座標の変化でドラッグが開始したかどうかを判断します。これは、マウスポインタのある座標位置を起点にした矩形を作成し、この座標の変化で判断します。
そして、MarqueeStyleプロパティで行全体を反転表示に切り替え、DoDragDroメソッドを実行します。
このメソッドは、指定された行に対し指定した「DragDropEffect」列挙体のメンバ「コピー」に従ってドラッグ&ドロップ操作を開始します。
Private Sub C1TrueDBGrid1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles C1TrueDBGrid1.MouseMove 'ドラッグの開始点が空でない場合はラッグが開始されていると判断 If Not StartDrag_PT.IsEmpty Then 'ドラッグ操作の開始点を囲む四角形を 2 ピクセルで作成 Dim rect As New Rectangle(StartDrag_PT, Drawing.Size.Empty) rect.Inflate(2, 2) '3ピクセル以上移動している場合はドラッグ操作を開始 If Not rect.Contains(e.X, e.Y) Then C1TrueDBGrid1.Row = DragRowNo C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow C1TrueDBGrid1.DoDragDrop(DragRowNo, DragDropEffects.Copy) End If End If End Sub
private void c1TrueDBGrid1_MouseMove(object sender, MouseEventArgs e) { //ドラッグの開始点が空でない場合はラッグが開始されていると判断 if (!StartDrag_PT.IsEmpty) { //ドラッグ操作の開始点を囲む四角形を 2 ピクセルで作成 Rectangle rect = new Rectangle(StartDrag_PT, Size.Empty); rect.Inflate(2, 2); // 3ピクセル以上移動している場合はドラッグ操作を開始 if (!rect.Contains(e.X, e.Y)) { c1TrueDBGrid1.Row = DragRowNo; c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.HighlightRow; c1TrueDBGrid1.DoDragDrop(DragRowNo, DragDropEffects.Copy); } } }
メンバ名 | 説明 |
None | アクションなし。 |
Move | ドラッグ元要素をドラッグ先要素に移動します。 |
Copy | ドラッグ元要素をドラッグ先要素にコピーします。 |