剪贴板对象处理

时间:2015-07-06 14:28:30

标签: 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}

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

1 个答案:

答案 0 :(得分:0)

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

  • 它是易失性的,因此自您开始操作后内容可能已经改变。
  • 剪贴板中的数据属于其他应用程序,可能无法正确恢复,从而导致不稳定。
  • 未经用户同意,您不应更改剪贴板。

也就是说,这里有一些未经测试的代码可以做你想要的。

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);
    }
}