クリップボードを操作する方法について紹介します。
クリップボードの操作はSystem.Windows.Forms名前空間にあるClipboardクラス、またはSystem.Windows名前空間にあるClipboardクラスを使用します。
System.Windows.Forms名前空間のClipboardクラスはWindowsフォームアプリケーションで使用し、System.Windows名前空間のClipboardクラスはWPF等で使用します。
本記事ではSystem.Windows.Forms名前空間のClipboardクラスを例に記載します。(System.Windows名前空間のClipboardクラスも構造はSystem.Windows.Forms名前空間のClipboardクラスと同じです。)
本記事のサンプルコードでは名前空間を省略している箇所があります。
1 2 3 4 5 |
using System; using System.Drawing; using System.Windows.Forms; using System.IO; using System.Collections.Specialized; |
サンプルコードをそのまま実行するには上記の参照が必要になります。
クリップボードのデータを取得する
クリップボードからデータを取得するにはGet~系の静的メソッドを使用します。
Get~系の静的メソッドにはGetAudioStream、GetData、GetDataObject、GetFileDropList、GetImage、GetTextの6種類の静的メソッドがあります。
静的メソッド | 説明 |
---|---|
GetAudioStream() | クリップボードからオーディオストリームを取得します。 |
GetData(String) | クリップボードから指定したDataFormatsクラスに定義されているデータの形式でデータを取得します。 |
GetDataObject() | クリップボードからデータを取得します。 |
GetFileDropList() | クリップボードからファイル名(ファイルパス)のコレクションを取得します。 |
GetImage() | クリップボードからイメージを取得します。 |
GetText() | クリップボードからテキストを取得します。 |
GetText(TextDataFormat) | クリップボードから指定したTextDataFormat列挙型の値が示す形式でテキストを取得します。 |
GetAudioStream静的メソッド
GetAudioStream静的メソッドはクリップボードにあるオーディオをストリーム形式で返します。
GetAudioStream静的メソッドの構文は以下の通りです。
1 |
public static System.IO.Stream GetAudioStream (); |
サンプルコード
以下にGetAudioStream静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードからオーディオデータを取得 Stream stream = Clipboard.GetAudioStream(); |
GetData静的メソッド
GetData静的メソッドはクリップボードにある指定した形式のデータを返します。
GetData静的メソッドの構文は以下の通りです。
1 |
public static object GetData (string format); |
引数にはDataFormatsクラスに定義されているデータの形式を指定します。
サンプルコード
以下にGetData静的メソッドを使用するサンプルコードを記載します。
1 2 |
// データ形式を指定してクリップボードからデータを取得 object data = Clipboard.GetData(DataFormats.Rtf); |
GetDataObject静的メソッド
GetDataObject静的メソッドはクリップボードにあるデータを返します。
GetDataObject静的メソッドの構文は以下の通りです。
1 |
public static System.Windows.Forms.IDataObject GetDataObject (); |
サンプルコード
以下にGetDataObject静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードからデータオブジェクトを取得 IDataObject dataObject = Clipboard.GetDataObject(); |
GetFileDropList静的メソッド
GetFileDropList静的メソッドはクリップボードにあるファイルをファイル名(ファイルパス)のコレクションで返します。
GetFileDropList静的メソッドの構文は以下の通りです。
1 |
public static System.Collections.Specialized.StringCollection GetFileDropList (); |
サンプルコード
以下にGetFileDropList静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードからファイル名(ファイルパス)のコレクションを取得 StringCollection files = Clipboard.GetFileDropList(); |
GetImage静的メソッド
GetImage静的メソッドはクリップボードにあるイメージを返します。
GetImage静的メソッドの構文は以下の通りです。
1 |
public static System.Drawing.Image GetImage (); |
サンプルコード
以下にGetImage静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードからイメージを取得 Image image = Clipboard.GetImage(); |
GetText静的メソッド
GetText静的メソッドはクリップボードにあるテキストを返します。
GetText静的メソッドの構文は以下の通りです。
1 |
public static string GetText (); |
1 |
public static string GetText (System.Windows.Forms.TextDataFormat format); |
引数にはテキストの形式を示すTextDataFormat型の値を指定できます。テキストの形式を指定した場合は、形式に合うテキストの場合のみデータを取得することができます。
サンプルコード
以下にGetText静的メソッドを使用するサンプルコードを記載します。
1 2 3 4 5 |
// クリップボードからテキストを取得 string text1 = Clipboard.GetText(); // 形式を指定してクリップボードからテキストを取得 string text2 = Clipboard.GetText(TextDataFormat.UnicodeText); |
クリップボードにデータを設定する
クリップボードへデータを設定するにはSet~系の静的メソッドを使用します。
Set~系の静的メソッドにはSetAudio、SetData、SetDataObject、SetFileDropList、SetImage、SetTextの6種類の静的メソッドがあります。
静的メソッド | 説明 |
---|---|
SetAudio(Byte[]) | Byte配列をオーディオ(WaveAudio)形式で設定します。 |
SetAudio(Stream) | Streamをオーディオ(WaveAudio)形式で設定します。 |
SetData(String, Object) | 指定したDataFormatsクラスに定義されているデータの形式でデータを設定します。 |
SetDataObject(Object) | クリップボードにデータを設定します。 |
SetDataObject(Object, Boolean) | アプリケーションが終了してもクリップボードにデータを残しておくかどうかを指定して、クリップボードにデータを設定します。 |
SetDataObject(Object, Boolean, Int32, Int32) | アプリケーションが終了してもクリップボードにデータを残しておくかどうか、試行回数、試行間隔を指定して、クリップボードにデータを設定します。 |
SetFileDropList(StringCollection) | ファイル名(ファイルパス)のコレクションをファイル(FileDrop)形式で設定します。 |
SetImage(Image) | イメージ(Bitmap)形式のデータを設定します。 |
SetText(String) | テキストデータを設定します。 |
SetText(String, TextDataFormat) | 指定したTextDataFormat列挙型の値が示す形式でテキストデータを設定します。 |
SetAudio静的メソッド
SetAudio静的メソッドはオーディオ形式のデータをクリップボードに貼りつけます。
SetAudio静的メソッドの構文は以下の通りです。
1 |
public static void SetAudio (byte[] audioBytes); |
1 |
public static void SetAudio (System.IO.Stream audioStream); |
引数にはByte配列またはStreamを指定します。
サンプルコード
以下にSetAudio静的メソッドを使用するサンプルコードを記載します。
1 2 3 4 5 6 7 |
// クリップボードにオーディオ形式のデータを設定 // 引数にByte配列を指定 Clipboard.SetAudio(audioBytesData); // クリップボードにオーディオ形式のデータを設定 // 引数にStreamを指定 Clipboard.SetAudio(audioStream); |
SetData静的メソッド
SetData静的メソッドは指定した形式のデータをクリップボードに貼りつけます。
SetData静的メソッドの構文は以下の通りです。
1 |
public static void SetData (string format, object data); |
引数formatにはDataFormatsクラスに定義されているデータの形式を指定します。
サンプルコード
以下にSetData静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードにビットマップ形式のデータを設定 Clipboard.SetData(DataFormats.Bitmap, data); |
SetDataObject静的メソッド
SetDataObject静的メソッドはデータをクリップボードに貼りつけます。
SetDataObject静的メソッドの構文は以下の通りです。
1 |
public static void SetDataObject (object data); |
1 |
public static void SetDataObject (object data, bool copy); |
1 |
public static void SetDataObject (object data, bool copy, int retryTimes, int retryDelay); |
引数copyにはデータをアプリケーションが終了してもクリップボードに残しておくかどうかをtrueまたはfalseで指定します。
引数retryTimesは試行回数、引数retryDelay試行間隔を指定します。
サンプルコード
以下にSetDataObject静的メソッドを使用するサンプルコードを記載します。
1 2 3 4 5 6 7 8 9 10 11 |
// クリップボードにデータを設定 Clipboard.SetDataObject(data); // クリップボードにデータを設定 // アプリケーション終了後もデータを保持する Clipboard.SetDataObject(data, true); // クリップボードにデータを設定 // アプリケーション終了後はデータを保持しない // 試行回数: 10 試行間隔:1000 を指定 Clipboard.SetDataObject(data, false, 10, 1000); |
SetFileDropList静的メソッド
SetFileDropList静的メソッドはファイル形式のデータをクリップボードに貼りつけます。
SetFileDropList静的メソッドの構文は以下の通りです。
1 |
public static void SetFileDropList (System.Collections.Specialized.StringCollection filePaths); |
引数にはファイルパスを表す文字列のコレクションを指定します。
サンプルコード
以下にSetFileDropList静的メソッドを使用するサンプルコードを記載します。
1 2 3 |
// クリップボードにファイル形式のデータを設定 // 引数にファイル名(ファイルパス)のコレクションを設定 Clipboard.SetFileDropList(filePaths); |
SetImage静的メソッド
SetImage静的メソッドはイメージ形式のデータをクリップボードに貼りつけます。
SetImage静的メソッドの構文は以下の通りです。
1 |
public static void SetImage (System.Drawing.Image image); |
サンプルコード
以下にSetImage静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードにイメージ形式のデータを設定 Clipboard.SetImage(image); |
SetText静的メソッド
SetText静的メソッドはテキスト形式のデータをクリップボードに貼りつけます。
SetText静的メソッドの構文は以下の通りです。
1 |
public static void SetText (string text); |
1 |
public static void SetText (string text, System.Windows.Forms.TextDataFormat format); |
引数にはテキストの形式を示すTextDataFormat型の値を指定できます。テキストの形式を指定した場合は、指定した形式のテキストとしてクリップボードにデータが設定されます。
サンプルコード
以下にSetText静的メソッドを使用するサンプルコードを記載します。
1 2 3 4 5 |
// クリップボードにテキスト形式のデータを設定 Clipboard.SetText(text); // クリップボードにテキスト形式のデータを設定 Clipboard.SetText(text, TextDataFormat.Text); |
クリップボードにデータが存在するかどうかを確認する
クリップボードにデータが存在するかどうかを参照するにはContains~系の静的メソッドを使用します。
Contains~系の静的メソッドはbool型の戻り値を返し、データが存在する場合はtrueを、データが存在しない場合はfalseを返します。
Contains~系の静的メソッドにはContainsAudio、ContainsData、ContainsFileDropList、ContainsImage、ContainsTextの5種類があります。
静的メソッド | 説明 |
---|---|
ContainsAudio() | クリップボードにオーディオ(WaveAudio)形式のデータが存在するかどうかを示す値を取得します。 |
ContainsData(String) | 指定したDataFormatsクラスに定義されているデータの形式のデータがクリップボードに存在するかどうかを示す値を取得します。 |
ContainsFileDropList() | ファイル(FileDrop)形式のデータがクリップボードに存在するかどうかを示す値を取得します。 |
ContainsImage() | イメージ(Bitmap)形式のデータがクリップボードに存在するかどうかを示す値を取得します。 |
ContainsText() | テキスト形式のデータがクリップボードに存在するかどうかを示す値を取得します。 |
ContainsText(TextDataFormat) | 指定したTextDataFormat列挙型の値が示す形式のテキスト形式のデータがクリップボードに存在するかどうかを示す値を取得します。 |
ContainsAudio静的メソッド
ContainsAudio静的メソッドはクリップボードにオーディオ形式のデータが存在するかどうかを返します。
ContainsAudio静的メソッドの構文は以下の通りです。
1 |
public static bool ContainsAudio (); |
サンプルコード
以下にContainsAudio静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードにオーディオ形式のデータがあるかどうかを取得 bool isExists = Clipboard.ContainsAudio(); |
ContainsData静的メソッド
ContainsAudio静的メソッドはクリップボードに指定した形式のデータが存在するかどうかを返します。
ContainsData静的メソッドの構文は以下の通りです。
1 |
public static bool ContainsData (string format); |
引数formatにはDataFormatsクラスに定義されているデータの形式を指定します。
サンプルコード
以下にContainsData静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードに指定した形式のデータがあるかどうかを取得 bool isExists = Clipboard.ContainsData(DataFormats.Bitmap); |
ContainsFileDropList静的メソッド
ContainsFileDropList静的メソッドはファイル形式のデータが存在するかどうかを返します。
ContainsFileDropList静的メソッドの構文は以下の通りです。
1 |
public static bool ContainsFileDropList (); |
サンプルコード
以下にContainsFileDropList静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードにファイル形式のデータがあるかどうかを取得 bool isExists = Clipboard.ContainsFileDropList(); |
ContainsImage静的メソッド
ContainsImage静的メソッドはファイル形式のデータが存在するかどうかを返します。
ContainsImage静的メソッドの構文は以下の通りです。
1 |
public static bool ContainsImage (); |
サンプルコード
以下にContainsImage静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードにイメージ形式のデータがあるかどうかを取得 bool isExists = Clipboard.ContainsImage(); |
ContainsText静的メソッド
ContainsText静的メソッドはテキスト形式のデータが存在するかどうかを返します。
ContainsText静的メソッドの構文は以下の通りです。
1 |
public static bool ContainsText (); |
1 |
public static bool ContainsText (System.Windows.Forms.TextDataFormat format); |
引数にはテキストの形式を示すTextDataFormat型の値を指定できます。テキストの形式を指定した場合は、指定した形式のテキストがクリップボードに存在する場合のみtrueが返されます。
サンプルコード
以下にContainsText静的メソッドを使用するサンプルコードを記載します。
1 2 3 4 |
// クリップボードにテキスト形式のデータがあるかどうかを取得 bool isExists = Clipboard.ContainsText(); // クリップボードに指定した形式のテキストデータがあるかどうかを取得 bool isExists = Clipboard.ContainsText(TextDataFormat.CommaSeparatedValue); |
クリップボードをクリアする
クリップボードのデータをクリアするにはClear静的メソッドを使用します。
Clear静的メソッド
Clear静的メソッドはクリップボードのすべてのデータを削除します。
ContainsImage静的メソッドの構文は以下の通りです。
1 |
public static void Clear (); |
サンプルコード
以下にClear静的メソッドを使用するサンプルコードを記載します。
1 2 |
// クリップボードをクリア Clipboard.Clear(); |
サンプルプログラム
Windowsフォームアプリケーションでのプログラムの実装例を記載します。
以下のサンプルでは画面に配置したテキストボックスのテキストをクリップボードへ設定、およびクリップボードから取得する処理を実装します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
ソースコード
サンプルプログラムのフォームには以下のソースコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // クリップボードへテキストを設定する private void button1_Click(object sender, EventArgs e) { try { // クリップボードへ設定するテキストをテキストボックスから取得 string text = textBox1.Text; // クリップボードへデータをHTML形式で設定 Clipboard.SetText(text, TextDataFormat.Html); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // クリップボードからテキストを取得する private void button2_Click(object sender, EventArgs e) { try { // クリップボードにHTML形式のテキストが存在するかどうかを確認 if (Clipboard.ContainsText(TextDataFormat.Html)) { // クリップボードからデータをHTML形式で取得 string text = Clipboard.GetText(TextDataFormat.Html); // クリップボードから取得したテキストをテキストボックスに設定 textBox2.Text = text; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
実行結果
作成したサンプルプログラムを実行します。
上段のテキストボックスにテキストを入力してbutton1をクリックすると、HTML形式でクリップボードにテキストが設定されます。
クリップボードにHTML形式のテキストが格納されている状態でbutton2をクリックすると、下段のテキストボックスにテキストが設定されます。
参考URL
System.Windows.Forms.Clipboardクラス
System.Windows.Clipboardクラス
DataFormatsクラス
TextDataFormat列挙型