SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

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

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

Windowsフォームアプリケーションにドラッグ&ドロップ機能を組み込んで操作性を向上させる方法を学習します。

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

はじめに

 一般的に、Windowsアプリケーション上に外部アプリケーションからデータをドラッグ&ドロップする際は、渡されるデータの構造や、データの使用に適した仕組みを見極める必要があります。

 ドラッグ&ドロップ機能の実装には手間がかかるため敬遠する開発者もいますが、ドラッグ&ドロップをサポートするとアプリケーションの有用性は大きく高まります。本稿では、Windowsフォームアプリケーションにドラッグ&ドロップ機能を実装する方法を紹介します。

ドラッグ&ドロップに関するイベントハンドラ

 あるコントロールから別のコントロールにオブジェクトをドラッグ&ドロップする方法を理解するには、いくつかのイベントハンドラについて理解しておく必要があります。図1の例を見てください。これは、PictureBoxコントロールに表示された画像を別のPictureBoxコントロールにドラッグするところを示しています。

図1 PictureBoxコントロールから別のPictureBoxコントロールに画像をドラッグする
図1 PictureBoxコントロールから別のPictureBoxコントロールに画像をドラッグする

 ドラッグ&ドロップ機能を実装するには、両方のコントロールに対するコードを記述します。

ドラッグするコントロールのコード

 ドラッグしようとするデータのロード処理の起点は、通常はMouseDownまたはMouseMoveイベントになります。図1の例では、このどちらかのイベントで、左側のPictureBoxコントロールに格納されている画像をクリップボードにコピーします。

 ドラッグ操作の結果、つまり、ユーザーが最終的にアイテムをドロップしたかどうかは、QueryContinueDragイベントで知ることができます。移動を目的とするドラッグ操作をユーザーが正しくやり遂げた場合は、左側のPictureBoxコントロールにある画像を削除する必要があるでしょう。

 ドラッグ元のコントロールは、ドラッグ操作の間はGiveFeedBackイベントを送出し続けます。マウスポインタの外観を変更したい場合は、このイベントで処理できます。

ドロップを受け入れるコントロールのコード

 ドロップを受け入れるコントロールの領域にマウスが入ると、そのコントロールはDragEnterイベントを送出します。通常は、このイベントのイベントハンドラに、実行中の処理(コピーや移動など)を反映するようにマウスポインタの形状を変化させるコードを記述します。さらに、そのコントロールの外観を変化させて、ドロップ先であることがすぐに分かるようにすることもできます。

 ドロップを受け入れるコントロールの上にマウスがとどまっている間、そのコントロールはDragOverイベントを送出します。このイベントは、ターゲットのコントロール上にマウスがある間はずっと発生し続けます。このイベントまたはDragEnterイベントを使用して、マウスポインタの外観を変更できます。

 ドロップを受け入れるコントロールからマウスが離れると、そのコントロールはDragLeaveイベントを送出します。DragEnterイベントでコントロールの外観を変更していた場合は、通常はこのイベントのイベントハンドラで元に戻します。

 ドロップを受け入れるコントロールの上でオブジェクトをドロップすると、DragDropイベントが発生するので、このイベントを適切に処理します。図1の例では、左側のコントロールからドラッグした画像を、右側のPictureBoxコントロールにロードすることになります。

 ここで説明した一連のイベントが、すべてのコントロールでサポートされているわけではないことに注目してください。例えば、RichTextBoxコントロールはDragOverイベントをサポートしません。従って、ドラッグ&ドロップを検知するには、DragEnterイベントなど、サポートされている別のイベントを使用する必要があります。

 また、ほとんどのコントロールでは、デザイン時にプロパティウィンドウでAllowDropプロパティを設定できます。しかし、いくつかのコントロール(PictureBoxコントロールなど)では、プロパティウィンドウにAllowDropプロパティが表示されません。従って、コードの中で動的に設定する必要があります。さらに、Visual Studioの入力支援機能(インテリセンス)でAllowDropプロパティが表示されないことにも注意してください。

編者注
 この記事の初出はCoDe Magazineの2008年3月/4月号で、本稿では許可を得て再掲しています。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
テキストのドラッグ&ドロップ

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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、ワイヤレステクノロジーに関す...

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2653 2008/07/18 10:02

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング