首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C# 剪貼板進階操作:自訂資料格式與序列化完整實作

     編輯:VC 教學

核心流程四步驟

  1. 定義可序列化類別: 實作 ISerializable 介面或標記 [Serializable] 屬性(父類別也需標記),不想序列化的欄位用 [NonSerialized] 排除。
  2. 註冊自訂資料格式: 呼叫 DataFormats.GetFormat() 靜態方法取得格式物件。
  3. 寫入剪貼板: 建立實作 IDataObject 的資料物件,設定資料後呼叫 Clipboard.SetDataObject()。
  4. 讀取剪貼板: 用 DataObject.GetDataPresent() 確認格式相容,再呼叫 IDataObject.GetData() 取得資料。

完整範例程式碼解析

範例示範監聽剪貼板變更(掛鉤 WM_DRAWCLIPBOARD)、處理文字/圖片/自訂類型 MyItem 的讀寫。

關鍵類別: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。
  • WndProc 處理訊息: 偵測文字(DataFormats.Text/OemText)、圖片(Bitmap)、自訂類型(typeof(MyItem).FullName)。
  • 讀取自訂物件: 靜態方法 GetFromClipboard() 透過 IDataObject.GetData(format) 還原物件。

實作提醒

  • 表單關閉時務必呼叫 ChangeClipboardChain 移除觀察者,避免剪貼板鏈斷裂。
  • 自訂類型必須標記 [Serializable],否則無法跨進程傳輸。
  • SetDataObject 第二參數 false 表示不保留應用程式結束後的資料;若需持久化請設 true。

應用場景

適用於需在應用程式間交換複雜物件(如商業實體、圖形元素)、實作剪貼板歷史記錄、或建立跨程式拖放功能的專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved