DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

クリップボードに複数の形式のデータをコピーする

クリップボードに文字列だけをコピーする方法は「クリップボードに文字列をコピーする」で、画像だけをコピーする方法は「クリップボードに画像をコピーする」で、ファイルのみをコピーする方法は「クリップボードにファイルをコピーする」で紹介しています。しかし、例えば文字列と画像の両方のデータをクリップボードにコピーすることもできます。ここでは、このように複数の形式のデータをクリップボードに格納する方法を紹介します。

クリップボードに複数の形式に関連付けられたデータをコピーするには、まずDataObjectオブジェクトを作成して、そのSetDataメソッドでデータを追加し、最後にClipboard.SetDataObjectメソッドでクリップボードに貼りつけます。

文字列と画像、さらにファイル形式でデータをクリップボードに格納する例を示します。このようにしてコピーすれば、テキストエディタでは文字列として、ペイントでは画像として、エクスプローラではファイルとして貼り付けることができます。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing
'Imports System.Windows.Forms

Dim filePath As String = "C:\test.jpg"

'DataObjectオブジェクトを作成し、Text形式のデータを追加する
Dim data As New DataObject(DataFormats.Text, filePath)
'Bitmap形式のデータを追加する
Dim bmp As New Bitmap(filePath)
data.SetData(DataFormats.Bitmap, bmp)
'FileDrop形式のデータを追加する
data.SetData(DataFormats.FileDrop, New String() {filePath})

'クリップボードに貼り付ける
Clipboard.SetDataObject(data, True)

'後始末
bmp.Dispose()
C#
コードを隠すコードを選択
//using System.Drawing;
//using System.Windows.Forms;

string filePath = @"C:\test.jpg";

//DataObjectオブジェクトを作成し、Text形式のデータを追加する
DataObject data = new DataObject(DataFormats.Text, filePath);
//Bitmap形式のデータを追加する
Bitmap bmp = new Bitmap(filePath);
data.SetData(DataFormats.Bitmap, bmp);
//FileDrop形式のデータを追加する
data.SetData(DataFormats.FileDrop, new string[] { filePath });

//クリップボードに貼り付ける
Clipboard.SetDataObject(data, true);

//後始末
bmp.Dispose();

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。