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

クリップボードに文字列をコピーする、クリップボードから文字列を取得する

クリップボードに文字列をコピーする

.NET Framework 2.0以降

Clipboard.SetTextメソッドを使えば、簡単に文字列をクリップボードにコピーできます。

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

'クリップボードに文字列をコピーする
Clipboard.SetText("コピーする文字列です。")
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//クリップボードに文字列をコピーする
Clipboard.SetText("コピーする文字列です。");

VB.NETでは、My.Computer.Clipboard.SetTextメソッドを使っても同じことができます。

この方法ではアプリケーション終了後もクリップボードにデータが残りますが、残さない方法は次をご覧下さい。

.NET Framework 1.1以前

.NET Framework 1.1以前でクリップボードに文字列をコピーするには、Clipboard.SetDataObjectメソッドを使います。アプリケーション終了後もクリップボードにデータを残しておくか否かの指定もできます。

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

'クリップボードに文字列をコピーする

'アプリケーション終了後、クリップボードからデータは削除される
Clipboard.SetDataObject("コピーする文字列です。")

'アプリケーション終了後もクリップボードにデータを残しておく
Clipboard.SetDataObject("コピーする文字列です。", True)
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//クリップボードに文字列をコピーする

//アプリケーション終了後、クリップボードからデータは削除される
Clipboard.SetDataObject("コピーする文字列です。");

//アプリケーション終了後もクリップボードにデータを残しておく
Clipboard.SetDataObject("コピーする文字列です。", true);

クリップボードから文字列を取得する

.NET Framework 2.0以降

.NET Framework 2.0以降では、Clipboard.GetTextメソッドを使います。

下の例ではClipboard.ContainsTextでクリップボードに文字列データがあるか事前に確認していますが、GetTextが空の文字列(String.Empty)を返すかによっても判断することができます。

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

'クリップボードに文字列データがあるか確認
If Clipboard.ContainsText() Then
    '文字列データがあるときはこれを取得する
    '取得できないときは空の文字列(String.Empty)を返す
    Console.WriteLine(Clipboard.GetText())
End If
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//クリップボードに文字列データがあるか確認
if (Clipboard.ContainsText())
{
    //文字列データがあるときはこれを取得する
    //取得できないときは空の文字列(String.Empty)を返す
    Console.WriteLine(Clipboard.GetText());
}

VB.NETでは、My.Computer.Clipboard.GetTextメソッドを使っても同じことができます。

補足:GetTextメソッドは、Windows2000以降のNT系OSであればTextDataFormat.UnicodeText、それ以外はTextDataFormat.Textを使って、IDataObject.GetDataメソッドでデータを取得しているようです。

.NET Framework 1.1以前

.NET Framework 1.1以前でクリップボードの文字列のデータを取得するには、Clipboard.GetDataObjectメソッドを使います。下の例ではGetDataPresentメソッドでクリップボードに文字列データがあるか確認していますが、GetDataメソッドがnullを返すかによって判断することもできます。

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

'クリップボードのデータを取得する
'クリップボードにデータが無いときはNothingを返す
Dim iData As IDataObject = Clipboard.GetDataObject()
'クリップボードに文字列データがあるか確認
If (Not iData Is Nothing) AndAlso (iData.GetDataPresent(DataFormats.Text)) Then
    '文字列データがあるときはこれを取得する
    '文字列データを取得できないときはNothingを返す
    Console.WriteLine(DirectCast(iData.GetData(DataFormats.Text), String))
End If
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//クリップボードのデータを取得する
//クリップボードにデータが無いときはnullを返す
IDataObject iData = Clipboard.GetDataObject();
//クリップボードに文字列データがあるか確認
if (iData != null && iData.GetDataPresent(DataFormats.Text))
{
    //文字列データがあるときはこれを取得する
    //文字列データを取得できないときはnullを返す
    Console.WriteLine((string)iData.GetData(DataFormats.Text));
}

クリップボードの文字列をDataFormats.Textで取得すると文字化けをするケースがわずかにあります(Visual Studioでコピーしたとき)。そのような場合は、DataFormats.Textの代わりにDataFormats.UnicodeTextを使用して下さい。

  • 履歴:
  • 2007/2/18 .NET Framework 2.0に関する記述を追加。
  • 2010/3/29 クリップボードから文字列を取得するコードでクリップボードにデータがあるか確認するようにした。

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

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。