SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

japan.internet.com翻訳記事

Windowsフォームアプリケーションにドラッグ&ドロップ機能を実装する

わずかな手間でユーザビリティがぐっと向上

テキストのドラッグ&ドロップ

 以降では、ドラッグ&ドロップを実装するサンプルアプリケーションを実際に作成してみます。Visual Studio 2005でWindowsフォームアプリケーションを新規作成し、「DragAndDrop」という名前を付けます。ドラッグ&ドロップ処理のコーディングは、使用するコントロールやデータタイプによって若干異なります。この節では、テキストをTextBoxコントロールにドラッグ&ドロップする方法を紹介します。

 デフォルトのForm1にTextBoxコントロールを配置し(図2を参照)、TextBoxコントロールの次の2つのプロパティを設定します。

cap
プロパティ名設定値
MultilineTrue
BorderStyleFixed3D
図2 Form1のTextBoxコントロール
図2 Form1のTextBoxコントロール

 Form1のコードビューに切り替えて、次の定数を宣言します。

Public Class Form1
  Const CtrlMask As Byte = 8

 Form1_Loadイベントで、TextBoxAllowDropプロパティをTrueに設定します。

Private Sub Form1_Load( _
  ByVal sender As System.Object, _
  ByVal e As System.EventArgs) _
  Handles MyBase.Load

  '---set the control to allow drop---
  TextBox1.AllowDrop = True
End Sub

 次に、DragEnterイベントのコードを記述します。前述したように、コントロールに何かをドラッグすると、このイベントが発生します。ここで、このドラッグ操作がコピーなのか移動なのかをCtrlキーの押下状態に基づいて判断し、その結果に応じてマウスポインタを設定します。この特殊なキーストロークをチェックするには、KeyStateプロパティとCtrlMask(1バイトのマスク定数、値は8)をAND演算します。さらに、ユーザーのための視覚的なヒントとなるように、TextBoxコントロールの境界線のスタイルをFixedSingleに変更します。コードは次のとおりです。

Private Sub TextBox1_DragEnter( _
  ByVal sender As Object, _
  ByVal e As _
     System.Windows.Forms.DragEventArgs) _
     Handles TextBox1.DragEnter
  '---if the data to be dropped is a text format---
  If (e.Data.GetDataPresent(DataFormats.Text)) Then
     '---determine if this is a copy or move---
     If (e.KeyState And CtrlMask) = CtrlMask Then
        e.Effect = DragDropEffects.Copy
     Else
        e.Effect = DragDropEffects.Move
     End If
     '---change the border style of the control---
     TextBox1.BorderStyle = BorderStyle.FixedSingle
  End If
End Sub

 ドラッグしたテキストがドロップされたときの処理は、DragDropイベントに記述します。コードは次のとおりです。

Private Sub TextBox1_DragDrop( _
  ByVal sender As Object, _
  ByVal e As System.Windows.Forms.DragEventArgs) _
  Handles TextBox1.DragDrop

  '---if the data to be dropped is a text format---
  If (e.Data.GetDataPresent(DataFormats.Text)) Then
     '---set the control to display
     ' the text being dropped---
     TextBox1.Text = e.Data.GetData( _
        DataFormats.Text)
  End If
  '---set the borderstyle back to its original---
  TextBox1.BorderStyle = BorderStyle.Fixed3D
End Sub

 この時点で、F5キーを押してアプリケーションをテストできます。図3は、ユーザーがTextBoxコントロール上で移動またはコピーの操作を行う際のマウスポインタを示しています。コピー操作を行うには、マウスをドラッグする際にCtrlキーを押したままにするだけです。図4は、ドロップを受け入れない領域にオブジェクトをドラッグした場合のポインタを示しています(図の下側)。

図3 移動時(上)とコピー時(下)のマウスポインタ
図3 移動時(上)とコピー時(下)のマウスポインタ
図4 コントロールの外にドラッグ
図4 コントロールの外にドラッグ

 テキストをドラッグ&ドロップする方法を覚えたところで、次はPictureBoxコントロール間で画像をドラッグ&ドロップする方法を見ていきましょう。

次のページ
画像のドラッグ&ドロップ(1)

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

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2653 2008/07/18 10:02

イベント

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

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

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

メールバックナンバー