SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(SPREAD)

2つのスプレッドシート間でデータをドラッグ&ドロップできる.NETアプリ

SPREAD for .NET 2.5J Windows Forms Editionコンポーネントの便利なテクニック

  • このエントリーをはてなブックマークに追加

データのドラッグ処理 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列挙体のメンバを指定します。

Visual Basic
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
C#.NET
private void fpSpread1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        try
        {
            fpSpread1.DoDragDrop(msg, 
                         DragDropEffects.Copy | DragDropEffects.Move);
        }
        catch (Exception)
        {
        }
    }
}
DragDropEffects列挙体のメンバ
メンバ名 説明
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

 rowcolumnにはセル範囲の左上の行列番号を、rowcountcolumncountにはそれぞれセル範囲の行列数を指定します。

 メソッドを実行すると、セル範囲内の書式付データをString型で返してきますので、これを変数に格納しておきます。

Visual Basic
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
C#.NET
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;
    }
}

次のページ
データのドラッグ処理 2

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1568 2010/06/17 12:59

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング