.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コントロールをダブルクリックし、次のコードを記述する。
|
|
Buttonコントロールをダブルクリックして記述するコード(C#) |
|
|
Buttonコントロールをダブルクリックして記述するコード(VB.NET) |
ブラウザなどで画像やテキストをクリップボードにコピーしてからボタンをクリックすれば、コピーされたデータの形式に従ってそれが表示されるはずだ。
カテゴリ:Windowsフォーム 処理対象:クリップボード 使用ライブラリ:Clipboardクラス(System.Windows.Forms名前空間) 使用ライブラリ:IDataObjectインターフェイス(System.Windows.Forms名前空間) 使用ライブラリ:DataFormatsクラス(System.Windows.Forms名前空間) |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|