C#では、クリップボードを操作するために、Clipboardクラスが用意されています。
クリップボードにコピー(保持)されたのテキストを取得するには、ClipboardクラスのGetText静的メソッドを使用します。
GetText静的メソッドは、パラメーター(引数)を指定せずに呼び出すと、プレーンのテキストを返します。
1 2 |
// クリップボードのテキストを取得する string text = Clipboard.GetText(); |
GetText静的メソッドにはテキストのフォーマット(書式)を指定できるパラメーター(引数)が用意されています。
今回は、GetText静的メソッドを使用してテキストを取得する時に、フォーマットを指定する方法について紹介します。
目次
Clipboardクラスについて
Clipboardクラスは、Windowsフォームアプリケーションと、WPFアプリケーションで利用することができます。
Windowsフォームアプリケーションでは、System.Windows.Forms名前空間にあり、WPFアプリケーションでは、System.Windows名前空間にあります。
本記事に記載のサンプルコードは、以下のusingが行われていることを前提とします。
1 2 3 4 5 |
// Windowsフォームアプリケーションの場合 using System.Windows.Forms; // WPFアプリケーションの場合 using System.Windows; |
フォーマット(書式)を指定してテキストを取得
ClipboardクラスのGetText静的メソッドのパラメーター(引数)に、フォーマット(書式)を指定してテキストを取得します。
Windowsフォームアプリケーション
GetText静的メソッドのパラメーター(引数)には、System.Windows.Forms名前空間にあるTextDataFormat列挙型のフィールドを指定します。
1 2 3 4 5 6 7 8 9 10 |
// テキスト(プレーンテキスト) string text = Clipboard.GetText(TextDataFormat.Text); // リッチテキスト string rtf = Clipboard.GetText(TextDataFormat.Rtf); // HTML: Hyper Text Markup Language string html = Clipboard.GetText(TextDataFormat.Html); // コンマ(カンマ)区切りテキスト(CSV: Comma Separated Value) string csv = Clipboard.GetText(TextDataFormat.CommaSeparatedValue); // ユニコードテキスト string unicode = Clipboard.GetText(TextDataFormat.UnicodeText); |
TextDataFormat列挙型のフィールド
フィールド | 値 | 説明 |
---|---|---|
Text | 0 | 標準 ANSI テキスト形式であることを指定します。 |
UnicodeText | 1 | 標準 Windows Unicode テキスト形式であることを指定します。 |
Rtf | 2 | リッチテキスト形式(RTF: Rich Text Format)のデータで構成されるテキストであることを指定します。 |
Html | 3 | HTML: HyperText Markup Language のデータで構成されるテキストであることを指定します。 |
CommaSeparatedValue | 4 | コンマ(カンマ)区切り (CSV: Comma-Separated Value) 形式のデータで構成されるテキストであることをを指定します。 |
WPFアプリケーション
GetText静的メソッドのパラメーター(引数)には、System.Windows名前空間にあるTextDataFormat列挙型のフィールドを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
// テキスト(プレーンテキスト) string text = Clipboard.GetText(TextDataFormat.Text); // リッチテキスト string rtf = Clipboard.GetText(TextDataFormat.Rtf); // HTML: Hyper Text Markup Language string html = Clipboard.GetText(TextDataFormat.Html); // コンマ(カンマ)区切りテキスト(CSV: Comma Separated Value) string csv = Clipboard.GetText(TextDataFormat.CommaSeparatedValue); // ユニコードテキスト string unicode = Clipboard.GetText(TextDataFormat.UnicodeText); // XAML: Extensible Application Markup Language string xaml = Clipboard.GetText(TextDataFormat.Xaml); |
TextDataFormat列挙型のフィールド
フィールド | 値 | 説明 |
---|---|---|
Text | 0 | 標準 ANSI テキスト形式であることを指定します。 |
UnicodeText | 1 | 標準 Windows Unicode テキスト形式であることを指定します。 |
Rtf | 2 | リッチテキスト形式(RTF: Rich Text Format)のデータで構成されるテキストであることを指定します。 |
Html | 3 | HTML: HyperText Markup Language のデータで構成されるテキストであることを指定します。 |
CommaSeparatedValue | 4 | コンマ(カンマ)区切り (CSV: Comma-Separated Value) 形式のデータで構成されるテキストであることをを指定します。 |
Xaml | 5 | XAML: Extensible Application Markup Language のデータで構成されるテキストであることを指定します。 |
サンプルプログラム
サンプルとして、Windowsフォームアプリケーションでクリップボードに保持されているテキストを、各フォーマットで取得して表示するプログラムを作成します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。
ユーザーインターフェース
サンプルのUI(画面)は以下のフォームを作成します。
フォームにはタブコントロール(tabControl1)とクリップボードのテキストを取得・表示するボタン(button1)を配置します。
タブコントロールの各タブページ(tabPage1~5)には、複数行入力を可能にしたテキストボックス(textBox1~5)を配置します。
テキストボックスを複数行入力できるようにする方法については、以下の記事でご紹介していますので参考にしてください。
ソースコード
各コントロールの初期化とボタンをクリックした時の処理を実装します。
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); // テキストボックスのMultilineプロパティを設定 textBox1.Multiline = true; textBox2.Multiline = true; textBox3.Multiline = true; textBox4.Multiline = true; textBox5.Multiline = true; // テキストボックスのWordWrapプロパティを設定 textBox1.WordWrap = false; textBox2.WordWrap = false; textBox3.WordWrap = false; textBox4.WordWrap = false; textBox5.WordWrap = false; // テキストボックスのDockプロパティを設定 textBox1.Dock = DockStyle.Fill; textBox2.Dock = DockStyle.Fill; textBox3.Dock = DockStyle.Fill; textBox4.Dock = DockStyle.Fill; textBox5.Dock = DockStyle.Fill; // テキストボックスのScrollBarsプロパティを設定 textBox1.ScrollBars = ScrollBars.Both; textBox2.ScrollBars = ScrollBars.Both; textBox3.ScrollBars = ScrollBars.Both; textBox4.ScrollBars = ScrollBars.Both; textBox5.ScrollBars = ScrollBars.Both; } // ボタンクリック時のイベントメソッド // クリップボードのテキストを各フォーマットで取得してテキストボックスに表示する private void button1_Click(object sender, EventArgs e) { // クリップボードからテキストが取得できない場合は処理終了 if (string.IsNullOrEmpty(Clipboard.GetText())) { return; } // テキストボックスをいったん初期化 textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; textBox5.Text = ""; // 各フォーマットのテキストをクリップボードから取得 string text = Clipboard.GetText(TextDataFormat.Text); string rtf = Clipboard.GetText(TextDataFormat.Rtf); string html = Clipboard.GetText(TextDataFormat.Html); string commaSeparatedValue = Clipboard.GetText(TextDataFormat.CommaSeparatedValue); string unicodeText = Clipboard.GetText(TextDataFormat.UnicodeText); // テキストボックスに表示 textBox1.Text = text; textBox2.Text = rtf; textBox3.Text = html; textBox4.Text = commaSeparatedValue; textBox5.Text = unicodeText; } } } |
プログラムの実行
作成したプロジェクトをビルドして実行(デバッグ)します。
ブラウザーに表示されているWebページ(HTMLページ)をコピーします。
クリップボードには、テキスト(プレーンテキスト)、HTMLテキスト、ユニコードテキストの3種類のデータが保持されます。
次にExcelシートをコピーします。
Excelシートをコピーすると、テキスト(プレーンテキスト)、リッチテキスト、HTMLテキスト、ユニコードテキストの4種類のデータが、クリップボードに保持されます。
ちなみにExcelシートをコピーした場合は、選択しているセル範囲が画像としてもクリップボードに保持されます。
1 2 |
// クリップボードからイメージを取得する Image image = Clipboard.GetImage(); |
クリップボードのイメージは、ClipboardクラスのGetImage静的メソッドを使って取得できます。