[英]How to copy Tuples to clipboard
我必須將三個不同的數據復制到剪貼板。 所以我創建了一個元組並將其復制到剪貼板,然后將其復制到剪貼板
var newTuple = new Tuple<Component, Color?, bool?>(CopyComponent, headerColour_Copied, IsHeaderForegroundDark_Copied);
Clipboard.SetDataObject(newTuple);
復制時出現異常,翻譯后可能聽起來像“其他數據可用”。 我也試圖清除剪貼板,但這沒有幫助。
Clipboard.SetDataObject(CopyComponent);
Clipboard.SetDataObject(headerColour_Copied);
Clipboard.SetDataObject(IsHeaderForegroundDark_Copied);
請注意,如果我不制作元組而是分別設置每個數據,一切都很好。
那么元組不能復制到剪貼板嗎?
我還嘗試將三個數據中的每一個都裝箱到 object 中,但仍然失敗
感謝您的幫助
帕特里克
泛型類型通常在 realm 之外不能很好地發揮作用。 網; 嘗試發送一個普通的值數組:
Clipboard.SetDataObject(new object[] { CopyComponent, headerColour_Copied, IsHeaderForegroundDark_Copied });
剪貼板內容可以被任何應用程序使用; 基本的內在類型在這里是更安全的選擇。
幸運的是,我們可以將ValueTuple
或Tuple
存儲在剪貼板上,並將其作為可序列化數據 object 檢索。
// using System.Windows;
public void TupleClipboardTest1()
{
(int, string) original = (11, "Eleven");
Clipboard.SetData(DataFormats.Serializable, original);
object retrieved = Clipboard.GetData(DataFormats.Serializable);
Debug.WriteLine(retrieved.GetType()); // System.ValueTuple`2[System.Int32,System.String]
(int, string) restored = (ValueTuple<int, string>)retrieved;
Debug.WriteLine(restored.Item1); // 11
Debug.WriteLine(restored.Item2); // Eleven
}
// using System.Windows;
public void TupleClipboardTest2()
{
Tuple<int, string> original = (11, "Eleven").ToTuple();
Clipboard.SetData(DataFormats.Serializable, original);
object retrieved = Clipboard.GetData(DataFormats.Serializable);
Debug.WriteLine(retrieved.GetType()); // System.Tuple`2[System.Int32, System.String]
Tuple<int, string> restored = (Tuple<int, string>)retrieved;
Debug.WriteLine(restored.Item1); // 11
Debug.WriteLine(restored.Item2); // Eleven
}
當然,它的項目也必須是可序列化的。 否則會導致 COMException。
// using System.Windows;
public void TupleClipboardTest3()
{
(int, System.Windows.Media.Color) original = (11, System.Windows.Media.Colors.Gray);
Clipboard.SetData(DataFormats.Serializable, original);
object retrieved = Clipboard.GetData(DataFormats.Serializable); // System.Runtime.InteropServices.COMException: 'Data on clipboard is invalid (0x800401D3 (CLIPBRD_E_BAD_DATA))'
}
因此,我們需要預先將不可序列化的項目轉換為可序列化的 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.