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

TextBox(またはRichTextBox)でコピー、切り取り、貼り付け、元に戻すを行う

テキストボックスでコピー、切り取り、貼り付け、元に戻すを行うには、それぞれテキストボックスコントロールのCopy、Cut、Paste、Undoメソッドを使います。

次の例では、テキストボックスコントロールTextBox1と、4つのボタンコントロールcopy、cut、paste、undoがあり、それぞれのボタンをクリックすることにより、TextBox1でコピー、切り取り、貼り付け、元に戻すの操作を行えるようにしています。

VB.NET
コードを隠すコードを選択
'コピーする
Private Sub copy_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles copy.Click
    If TextBox1.SelectionLength > 0 Then
        '選択されている文字列があるときはコピーする
        '(SelectionLengthで調べなくても問題はない)
        TextBox1.Copy()
    End If
End Sub

'切り取る
Private Sub cut_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles cut.Click
    If TextBox1.SelectionLength > 0 Then
        '選択されている文字列があるときは切り取る
        '(SelectionLengthで調べなくても問題はない)
        TextBox1.Cut()
    End If
End Sub

'貼り付ける
Private Sub paste_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles paste.Click
    Dim data As IDataObject = Clipboard.GetDataObject()
    If (Not data Is Nothing) AndAlso (data.GetDataPresent(DataFormats.Text) = True) Then
        'クリップボードにテキストデータがあるときは貼り付ける
        '(テキストデータの有無を調べなくても問題はない)
        TextBox1.Paste()
    End If
End Sub

'元に戻す
Private Sub undo_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles undo.Click
    'アンドゥができるか調べる
    If TextBox1.CanUndo Then
        'アンドゥする
        TextBox1.Undo()
        'アンドゥバッファを削除する
        TextBox1.ClearUndo()
    End If
End Sub
C#
コードを隠すコードを選択
//コピーする
 private void copy_Click(object sender, System.EventArgs e)
{
    if (TextBox1.SelectionLength > 0)
    {
        //選択されている文字列があるときはコピーする
        //(SelectionLengthで調べなくても問題はない)
        TextBox1.Copy();
    }
}

//切り取る
 private void cut_Click(object sender, System.EventArgs e)
{
    if (TextBox1.SelectionLength > 0)
    {
        //選択されている文字列があるときは切り取る
        //(SelectionLengthで調べなくても問題はない)
        TextBox1.Cut();
    }
}

//貼り付ける
 private void paste_Click(object sender, System.EventArgs e)
{
    IDataObject data = Clipboard.GetDataObject();
    if (data != null && data.GetDataPresent(DataFormats.Text) == true)
    {
        //クリップボードにテキストデータがあるときは貼り付ける
        //(テキストデータの有無を調べなくても問題はない)
        TextBox1.Paste();
    }
}

//元に戻す
 private void undo_Click(object sender, System.EventArgs e)
{
    //アンドゥができるか調べる
    if (TextBox1.CanUndo)
    {
        //アンドゥする
        TextBox1.Undo();
        //アンドゥバッファを削除する
        TextBox1.ClearUndo();
    }
}

ちなみにリッチテキストボックスコントロールではRichTextBox.Redoメソッドにより、やり直し(最後に元に戻された操作を再適用)することが出来ます。

  • 履歴:
  • 2010/3/29 クリップボードにテキストデータがあるか調べるコードを修正。

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

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。