C# 剪贴板对象处理
我在程序中使用windows剪贴板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} 这运行得很好,但在第二次单击我的按钮后,我的旧数据消失了,我认为它
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中,然后还原剪贴板。我不知道解决方案的细节因此,我很难完全发表评论,但之前我也做过类似的事情,我会说剪贴板绝对是做你想做的事情的最简单、最快捷的方式,但它肯定可以在根本不接触剪贴板的情况下完成。