ISerializable 介面或標記 [Serializable] 屬性(父類別也需標記),不想序列化的欄位用 [NonSerialized] 排除。DataFormats.GetFormat() 靜態方法取得格式物件。IDataObject 的資料物件,設定資料後呼叫 Clipboard.SetDataObject()。DataObject.GetDataPresent() 確認格式相容,再呼叫 IDataObject.GetData() 取得資料。範例示範監聽剪貼板變更(掛鉤 WM_DRAWCLIPBOARD)、處理文字/圖片/自訂類型 MyItem 的讀寫。
[Serializable]
public class MyItem
{
public MyItem() { itemName = "This is a Custom Item"; }
public string ItemName { get { return itemName; } }
private string itemName;
public void CopyToClipboard()
{
DataFormats.Format format = DataFormats.GetFormat(typeof(MyItem).FullName);
IDataObject dataObj = new DataObject();
dataObj.SetData(format.Name, false, this);
Clipboard.SetDataObject(dataObj, false);
}
}
SetClipboardViewer、ChangeClipboardChain、SendMessage 配合 WM_DRAWCLIPBOARD、WM_CHANGECBCHAIN。DataFormats.Text/OemText)、圖片(Bitmap)、自訂類型(typeof(MyItem).FullName)。GetFromClipboard() 透過 IDataObject.GetData(format) 還原物件。ChangeClipboardChain 移除觀察者,避免剪貼板鏈斷裂。[Serializable],否則無法跨進程傳輸。SetDataObject 第二參數 false 表示不保留應用程式結束後的資料;若需持久化請設 true。適用於需在應用程式間交換複雜物件(如商業實體、圖形元素)、實作剪貼板歷史記錄、或建立跨程式拖放功能的專案。