データのドラッグ処理 1
次に、データのドラッグ&ドロップの処理を組み立てます。
上のfpSpreadコンポーネントはドラッグ元の、下のfpSpreadコンポーネントはドロップを受け取る処理を組み立てることになります。
ドラッグ&ドロップ処理の作成
fpSpreadコンポーネントでドラッグ&ドロップ機能を利用するには、次のような処理を組み立てる必要があります。
1.同一fpSpreadコンポーネント内のやりとり
同一fpSpreadコンポーネント内でのデータのドラッグ&ドロップを実行するには、「MouseDown」イベントハンドラでドラッグ&ドロップ操作の効果を設定し、「MouseUp」イベントハンドラで選択されているセル範囲からデータを取得します。
2.2つのfpSpreadコンポーネントでのやりとり
2つのfpSpreadコンポーネント間でデータのドラッグ&ドロップ処理を作成するには、ドラッグ側のfpSpreadコンポーネントで1番と同じ処理を作成し、ドロップ側のfpSpreadコンポーネントでドロップするセル範囲を取得します。そこに取得したデータを転送し、その選択範囲をSheetオブジェクトに追加します。
ドラッグ元の処理-MouseDownイベント
まずは、データをドラッグ&ドロップする上のfpSpreadコンポーネントの処理を作成します。使用するイベントは2つで、「MouseDown」イベントでドラッグ&ドロップでデータをコピーするのか、移動するのかというドラッグ&ドロップ操作の効果を設定します。そして、「MouseUp」イベントで選択されたセル範囲からセルデータを取得します。
このプログラムでは、選択したセル範囲をマウスの左ボタンでドラッグしたときは同じシート内でのドラッグで、右ボタンでドラッグしたときはさらにfpSpreadコンポーネント間の移動を行えるようにします。
そこで、MouseDownイベントハンドラでは押されたボタンが右ボタンのときに、コピーまたは移動が行えるように、fpSpreadクラスのDoDragDrop
メソッドでドラッグ&ドロップ操作の効果を設定します。このメソッドは.NET FrameworkのSystem.Windows.Formsから継承されているメソッドで、引数にDragDropEffects列挙体のメンバを指定します。
Private Sub FpSpread1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles FpSpread1.MouseDown If e.Button = Windows.Forms.MouseButtons.Right Then Try FpSpread1.DoDragDrop(msg, _ DragDropEffects.Copy Or DragDropEffects.Move) Catch Exception As Exception End Try End If End Sub
private void fpSpread1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { try { fpSpread1.DoDragDrop(msg, DragDropEffects.Copy | DragDropEffects.Move); } catch (Exception) { } } }
メンバ名 | 説明 |
All | データがコピーされ、ドラッグソースから削除され、ドロップターゲットでスクロールされます。 |
Copy | データはドロップターゲットにコピーされます。 |
Link | ドラッグソースのデータはドロップターゲットにリンクされます。 |
Move | ドラッグソースのデータはドロップターゲットに移動されます。 |
None | ドロップターゲットはデータを受け付けません。 |
Scroll | ドロップターゲットでスクロールが開始されようとしているか、または現在スクロールが行われています。 |
ドラッグ元の処理-MouseUpイベント
MouseUpイベントハンドラでは、選択されているセル範囲を取得し、その中のデータを取り出します。
選択されているセル範囲の取得は、GetSelection
メソッドを使用します。メソッドを実行すると、セル範囲をCellRangeオブジェクトで返してきますので、これを変数に格納しておきます。
そして、GetClip
メソッドでセル範囲内のデータを取り出します。メソッドの書式は次のとおりです。
Function GetClip( _ ByVal row As Integer, _ ByVal column As Integer, _ ByVal rowCount As Integer, _ ByVal columnCount As Integer _ ) As String
row
、column
にはセル範囲の左上の行列番号を、rowcount
、columncount
にはそれぞれセル範囲の行列数を指定します。
メソッドを実行すると、セル範囲内の書式付データをString型で返してきますので、これを変数に格納しておきます。
Private Sub FpSpread1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles FpSpread1.MouseUp Try SelectRange = FpSpread1.ActiveSheet.GetSelection(0) msg = FpSpread1.ActiveSheet.GetClip(SelectRange.Row, _ SelectRange.Column, _ SelectRange.RowCount, _ SelectRange.ColumnCount) Catch Exception As Exception MessageBox.Show("選択されたセルがありません。") Exit Sub End Try End Sub
private void fpSpread1_MouseUp(object sender, MouseEventArgs e) { try { selectrange = fpSpread1.ActiveSheet.GetSelection(0); msg = fpSpread1.ActiveSheet.GetClip(selectrange.Row, selectrange.Column, selectrange.RowCount, selectrange.ColumnCount); } catch (Exception) { MessageBox.Show("選択されたセルがありません。"); return; } }