.NET TIPS

クリップボードからデータを受け取るには?

デジタルアドバンテージ
2004/04/23

 クリップボードは、アプリケーション間でデータを転送するためにWindowsシステムが提供している機構である。.NET Frameworkのクラス・ライブラリには、クリップボードのデータを読み書きするためのClipboardクラス(System.Windows.Forms名前空間)が用意されている。本稿では、このクラスを利用してクリップボードからデータを受け取る場合の基本的なコーディングについて解説する。

 プログラムでクリップボードからデータを受け取るには、まずクリップボード内に格納されているデータを取得し、次にそのデータに利用可能な形式のデータが含まれているかどうかを確認してから、実際のデータを読み取るという流れになる。

 データの取得がこのような2段階となっているのは、Windowsのクリップボードが、1つの情報を複数の異なるデータ形式で保持できるためだ。例えば、ブラウザで表示されているテキストの一部を選択し、メニューから[編集]−[コピー]を実行した場合、単純なテキストとともに、タグなどを含んだHTML形式のテキストなどもクリップボードには格納される。このためプログラムでは、どの形式のデータを読み取るかを指定する必要がある。

クリップボード・データの取得

 まずクリップボードからのデータの取得は、ClipboardクラスのGetDataObjectメソッドによって行う。

IDataObject data = Clipboard.GetDataObject();

 このメソッドはIDataObjectインターフェイス(System.Windows.Forms名前空間)を実装したオブジェクトを返す。このメソッドで得られたクリップボード・データに関しては、そのデータがどのようなクラスのオブジェクトであるかを気にせずに、IDataObjectインターフェイスで定義されているメソッドだけを使って操作せよ、という意味である。

形式を指定したデータの取得

 こうして得られたクリップボードのデータが、指定した形式をサポートしているかどうかを調べるには、IDataObjectインターフェイスで定義されているGetDataPresentメソッドを利用する。また、指定した形式のデータを取り出すには、同インターフェイスのGetDataメソッドを利用する。.NET Frameworkのクラス・ライブラリで直接サポートされている形式は、DataFormatsクラス(System.Windows.Forms名前空間)のプロパティとして定義されており、これら2つのメソッドでは、このプロパティの値をパラメータとして指定する。

 例えば、単純なテキスト形式のデータがクリップボードに含まれているかどうかを調べ、それが含まれていれば文字列として取り出すコードは次のようになる(C#の場合。VB.NETの場合は後述のサンプル・プログラムを参照)。

if (data.GetDataPresent(DataFormats.Text)) {
  str = (string)data.GetData(DataFormats.Text);
}

クリップボードのデータを表示するサンプル・プログラム

 以上の手順を使用したサンプル・プログラムを次に示す。このプログラムは、クリップボードにテキスト形式かビットマップ形式のデータが格納されている場合に、そのデータを取得して表示するものだ。

 まず、Visual Studio .NETでWindowsアプリケーションのプロジェクトを作成し、次の図のようにButtonコントロール、TextBoxコントロール、PictureBoxコントロールの3つをWindowsフォームの適当な位置に配置する。

Buttonコントロール、TextBoxコントロール、PictureBoxコントロールを配置したWindowsフォーム

 次に、いま配置したButtonコントロールをダブルクリックし、次のコードを記述する。

private void button1_Click(object sender, System.EventArgs e) {
  // 表示項目のクリア
  textBox1.Text = "";
  pictureBox1.Image = null;

  IDataObject data = Clipboard.GetDataObject();

  if (data.GetDataPresent(DataFormats.Text)) {
    textBox1.Text = (string)data.GetData(DataFormats.Text);
  }
  if (data.GetDataPresent(DataFormats.Bitmap)) {
    pictureBox1.Image = (Image)data.GetData(DataFormats.Bitmap);
  }
}
Buttonコントロールをダブルクリックして記述するコード(C#)
 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' 表示項目のクリア
  TextBox1.Text = ""
  PictureBox1.Image = Nothing

  Dim data As IDataObject = Clipboard.GetDataObject()

  If data.GetDataPresent(DataFormats.Text) Then
    TextBox1.Text = CType(data.GetData(DataFormats.Text), String)
  End If

  If data.GetDataPresent(DataFormats.Bitmap) Then
    PictureBox1.Image = CType(data.GetData(DataFormats.Bitmap), Image)
  End If
End Sub
Buttonコントロールをダブルクリックして記述するコード(VB.NET)

 ブラウザなどで画像やテキストをクリップボードにコピーしてからボタンをクリックすれば、コピーされたデータの形式に従ってそれが表示されるはずだ。End of Article

カテゴリ:Windowsフォーム 処理対象:クリップボード
使用ライブラリ:Clipboardクラス(System.Windows.Forms名前空間)
使用ライブラリ:IDataObjectインターフェイス(System.Windows.Forms名前空間)
使用ライブラリ:DataFormatsクラス(System.Windows.Forms名前空間)
 
この記事と関連性の高い別の.NET TIPS
クリップボードへデータを送るには?
クリップボードの内容をリアルタイムに取得するには?
Visual StudioのコードをHTML形式でクリップボードにコピーするには?
[ASP.NET]データベースの内容をクライアントにダウンロード提供するには?
WPF:DataGridやListViewなどに表示しているデータを別スレッドから変更するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間