C# 剪贴板对象处理

C# 剪贴板对象处理,c#,C#,我在程序中使用windows剪贴板 private void btnTest_Click(object sender, EventArgs e){ IDataObject data = Clipboard.GetDataObject(); //save old data DoSomethingWithClipboard(); Clipboard.SetDataObject(data); //Set old data back} 这运行得很好,但在第二次单击我的按钮后,我的旧数据消失了,我认为它

我在程序中使用windows剪贴板

private void btnTest_Click(object sender, EventArgs e){
IDataObject data = Clipboard.GetDataObject(); //save old data
DoSomethingWithClipboard();
Clipboard.SetDataObject(data); //Set old data back}

这运行得很好,但在第二次单击我的按钮后,我的旧数据消失了,我认为它在第二次使用
IDataObject data=Clipboard.GetDataObject()后覆盖了某些内容

在我看来,像这样操纵剪贴板是个坏主意

  • 它是易变的,因此内容可能在您开始操作后发生了更改
  • 剪贴板中的数据将属于其他应用程序,可能无法正确恢复,从而导致不稳定
  • 未经用户同意,您不应更改剪贴板
这就是说,这里有一些未经测试的代码,它们应该做您想要做的事情

public class ClipBoardBackupRestore
{
    Dictionary<string, object> clipboardContents = new Dictionary<string, object>();

    public void Backup()
    {
        clipboardContents.Clear();

        IDataObject clipboardDataObject = Clipboard.GetDataObject();

        foreach (string format in clipboardDataObject.GetFormats())
        {
            clipboardContents.Add(format, clipboardDataObject.GetData(format));
        }
    }

    public void Restore()
    {
        DataObject clipboardDataObject = new DataObject();

        foreach (string format in clipboardContents.Keys)
        {
            clipboardDataObject.SetData(format, clipboardContents[format]);
        }

        Clipboard.SetDataObject(clipboardDataObject);
    }
}
公共类剪贴簿backuprestore
{
Dictionary clipboardContents=新字典();
公共无效备份()
{
clipboardContents.Clear();
IDataObject clipboardDataObject=剪贴板.GetDataObject();
foreach(clipboardDataObject.GetFormats()中的字符串格式)
{
添加(格式,clipboardDataObject.GetData(格式));
}
}
公共无效恢复()
{
DataObject clipboardDataObject=新数据对象();
foreach(clipboardContents.Keys中的字符串格式)
{
SetData(格式,剪贴簿内容[format]);
}
剪贴板.SetDataObject(clipboardDataObject);
}
}

请问一个特定的问题,然后发布代码。GetDataObject检索数据,SetDataObject设置数据-您是在从头开始做事情吗。首先我检索旧数据,在我的方法中用新数据填充,最后我设置旧数据,我需要使用剪贴板,因为我从数据库获取rtf格式,我必须将其填充到richtextbox中,从richtextbox获取格式化的rtf,将其粘贴到word中,然后还原剪贴板。我不知道解决方案的细节因此,我很难完全发表评论,但之前我也做过类似的事情,我会说剪贴板绝对是做你想做的事情的最简单、最快捷的方式,但它肯定可以在根本不接触剪贴板的情况下完成。