2013-04-29 43 views
5

Tôi đang cố gắng đưa vào đoạn clipboard của HTML và văn bản thuần tuý cùng một lúc để các trình chỉnh sửa có khả năng HTML có thể dán HTML và các trình chỉnh sửa khác có thể sử dụng văn bản thuần túy.Làm thế nào để sao chép cả hai - HTML và văn bản vào clipboard?

Clipboard.SetData(DataFormats.Html, htmlWithHeader); 
Clipboard.SetData(DataFormats.UnicodeText, plainText); 

Nhưng chỉ định dạng cuối cùng mới được đưa vào khay nhớ tạm. Trong ví dụ trên, khay nhớ tạm sẽ chỉ chứa văn bản thuần túy (như được hiển thị bởi Clipboard.GetDataObject().GetFormats()). Và nếu tôi trao đổi các dòng, clipboard sẽ chỉ có định dạng HTML.

Làm cách nào để có thể đặt cả hai định dạng vào clipboard cùng một lúc?

Trả lời

15

Bạn KHÔNG thể sử dụng Clipboard.SetData để đặt cả HTML và văn bản thuần túy. Cuộc gọi thứ hai của SetData sẽ xóa nội dung của khay nhớ tạm đã được đặt bằng cuộc gọi đầu tiên và lưu trữ dữ liệu mới.

Bạn nên sử dụng DataObjectClipboard.SetDataObject().

Ví dụ:

DataObject dataObj = new DataObject(); 
dataObj.SetData(DataFormats.Html, htmlWithHeader); 
dataObj.SetData(DataFormats.Text, plainText); 

Clipboard.SetDataObject(dataObj); 
+2

có nó không thể tốt hơn để lấy những gì là trong 'Clipboard' sau đó tạo ra 'của bạn DataObject' tắt của mà sau đó thêm các mục người của bạn? Bằng cách đó bạn không xóa ngày 'Clipboard' hiện có? –

+3

@Bob, KHÔNG! Điều đó sẽ tạo ra một đoạn phim tua-bin lai, có thể có dữ liệu từ các ứng dụng khác nhau. Giả sử bạn có RTF trên khay nhớ tạm, sau đó bạn thêm bản rõ từ một ứng dụng, html từ một ứng dụng khác, và sau đó bitmap từ một ứng dụng khác. Khi bạn dán vào Notepad, bạn sẽ nhận được bản rõ. Khi bạn dán vào MS Paint, bạn sẽ nhận được bitmap. Khi bạn dán vào WinWord, ai biết được? Đây không phải là cách clipboard được cho là hoạt động. –

Các vấn đề liên quan