检查剪贴板是否有数据,粘贴到文本框中

时间:2013-12-06 04:33:41

标签: c# .net winforms clipboard copy-paste

我试图将从剪贴板收集的数据粘贴到文本框(C#)

在这种情况下,我将一些东西复制到剪贴板

Clipboard.SetText("Hello, clipboard"); 

如何在剪贴板具有某些功能的情况下(或当用户执行ctrl + c时)在文本框中执行复制事件时,我该怎么做?

我尝试过这段代码;我的文本框是tbData:

private void tbData_TextChanged(object sender, EventArgs e)
{
    if (Clipboard.ContainsText(TextDataFormat.Text))
    {
        tbData.Text = Clipboard.GetText();
        Clipboard.Clear();
    }
}

但我得到了这个例外:

  

请求的剪贴板操作未成功

2 个答案:

答案 0 :(得分:1)

您必须为剪贴板更新事件连接事件处理程序。但这需要使用P / Invoke到DllImport(“user32.dll”)来获取事件。请参阅此文http://www.fluxbytes.com/csharp/how-to-monitor-for-clipboard-changes-using-addclipboardformatlistener/

然后你可以这样做.....

//register clipboard change
            YourAppName.ClipboardUpdate += new EventHandler(ClipboardChanged);
private void ClipboardChanged(object sender, EventArgs e)

    {
        IDataObject iData = Clipboard.GetDataObject();

        //clipboard not empty and these are the formats I am only interested in
        if (iData.GetDataPresent(DataFormats.UnicodeText) || iData.GetDataPresent(DataFormats.Text) || iData.GetDataPresent(DataFormats.Html)) 
        { 
         //do work
        }
     }    

答案 1 :(得分:0)

试试此代码

if (Clipboard.ContainsText(TextDataFormat.Html))
{
    returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
    Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
}