c# - 如何在 C# 中将多个项目复制到剪贴板历史记录?
问题描述
我正在使用 Win API ( Windows.ApplicationModel.DataTransfer.Clipboard
) 中的剪贴板类。当我尝试将多个项目一一复制到剪贴板历史记录时,它会被最近的项目覆盖。我想将我复制的每个项目存储到剪贴板历史记录中。我的剪贴板历史记录已启用,我尝试使用剪贴板中的所有设置方法,包括SetText
来自 ( System.Windows.Clipboard
) 的方法,所有这些方法都会覆盖而不是添加到历史记录中。
private void UpdateClipboardOnProfileDropDownClosed(object sender, EventArgs e)
{
Clipboard.ClearHistory();
using (var db = new LiteDatabase(Path.Combine(documents, "Auto Paste Clipboard", "data.db")))
{
var collection = db.GetCollection<ClipboardProfile>("clipboard");
var clipboard = collection.FindOne(x => x.Profile == ProfileComboBox.Text);
clipboard.Clipboard.Reverse();
MessageBox.Show(clipboard.Clipboard.Count.ToString());
foreach (var item in clipboard.Clipboard)
{
DataPackage data = new DataPackage
{
RequestedOperation = DataPackageOperation.Copy
};
data.SetText(item);
Clipboard.SetContent(data);
}
}
}
解决方案
剪贴板历史记录需要一些延迟才能保存当前项目。因此,您可以尝试在添加项目时添加延迟。
请检查以下代码作为示例:
private async void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
if(Clipboard.IsHistoryEnabled())
{
List<string> lists=new List<string>{ "1","2","3","4","5","6","7","8","9","10"};
foreach(var item in lists)
{
DataPackage dataPackage = new DataPackage();
dataPackage.SetText(item);
Clipboard.SetContent(dataPackage);
await Task.Delay(250);
}
}
}
注意,如果这些项目没有全部添加,您可以增加延迟时间。
推荐阅读
- sql - SQL query : Need to display the list of orders made by clients ordered by the date of the first order of a client
- javascript - JavaScript:Selenium:如何获取待处理的 xhr 请求的总数?
- r - 在 R 中使用 ggplot 在条形图中显示数据中不存在的级别
- javascript - 反应如何在输入模糊时触发表单提交?
- zpl - 打印时 A0N 尺寸与预期不同
- python - 如何更改 ttk.OptionMenu 的字体?
- amazon-web-services - 如何向 API 请求添加 Cognito 授权?以便 Lambdas 可以访问它
- java - 如何仅从数组中的父节点获取文本
- python-3.x - AttributeError:“NoneType”对象没有属性“isnull”
- php - 如何解决临时站点上的“致命错误:内存不足”问题?