2010-10-15 35 views
7

Tôi có thể Lưu nhiều hơn 1 loại trong Clipboard không? Ví dụ. như Văn bản & Hình ảnh. nói người dùng dán trong một trình soạn thảo văn bản, anh ta nhận được văn bản và nếu anh ấy dán vào một cái gì đó như photoshop, anh ấy nhận được hình ảnh. Tôi nghĩ đó là có thể, nhưng tôi đã cố gắngC#/WPF: Tôi có thể lưu trữ nhiều hơn 1 loại đó trong Clipboard không?

Clipboard.Clear(); 
Clipboard.SetText(img.DirectLink); 

BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.UriSource = new Uri(img.DirectLink); 
bitmapImage.EndInit(); 

Clipboard.SetImage(bitmapImage); 

và tôi luôn luôn có được hình ảnh

+0

Vâng, AFAIK chỉ có một khe cắm trong clipboard, kể từ khi bạn đưa hình ảnh cuối cùng, mà có thể có được mong đợi ... – flq

Trả lời

11

Vâng, đó là có thể. Vấn đề chính là, phương pháp bạn đang sử dụng clipboard rõ ràng trước khi đưa dữ liệu (đó là lý do tại sao họ đặt tên là "Set ..." thay vì "Add ...").

Clipboard.SetText (WinForms)/Clipboard.SetText (WPF) mô tả từ MSDN:

(WinForms): Xóa Clipboard và sau đó thêm dữ liệu văn bản ở định dạng văn bản hoặc UnicodeText, tùy thuộc vào hệ điều hành.

Nhưng một giải pháp tương đối đơn giản:

Để đặt dữ liệu vào Clipboard trong nhiều định dạng, sử dụng lớp DataObject hoặc một thực hiện IDataObject. Đặt dữ liệu trên Clipboard ở nhiều định dạng để tối đa hóa khả năng ứng dụng đích có yêu cầu về định dạng mà bạn có thể không biết, có thể truy xuất dữ liệu thành công.

Kiểm tra MSDN để biết chi tiết:


UPDATE:

Đã thêm liên kết vào các biến thể WPF.

Để làm rõ @ Björn bình luận:

Trang MSDN cho System.Windows.Clipboard.SetText() không nêu rằng clipboard sẽ bị xóa, mặc dù điều đó dường như là trường hợp

Cả hai phương pháp (WPF/WinForms) gọi nội bộ đến OleSetClipboard để hành vi tương tự (bạn có thể kiểm tra http://referencesource.microsoft.com/#q=Clipboard.SetText).

Tôi cũng đã kiểm tra cả hai biến thể (WinForms/WPF) trong ứng dụng giao diện điều khiển và thấy chúng hoạt động tương tự.

+0

xin lỗi, tôi đến muộn với bữa tiệc; Gần đây tôi đã cố gắng để có được một hình ảnh và một số văn bản trên clipboard cùng một lúc và nó đã không được làm việc. Mã của tôi trông như thế này: 'dataObject.SetText ("leText"); ' ' dataObject.SetImage (myImage);' 'Clipboard.SetDataObject (DataObject); ' Để làm cho nó hoạt tôi đã thêm một thêm boolean "true" vào phương thức SetDataObject: 'Clipboard.SetDataObject (dữ liệuObject, true);' xem câu trả lời [ở đây] (http://stackoverflow.com/questions/9032673/clipboard-copying-objects -to-and-from) –

+0

Liên kết đến MSDN thực sự là cho System.Windows.Forms.Clipboard, không phải System.Windows.Clipboard (WPF nào nên sử dụng). Trang MSDN cho System.Windows.Clipboard.SetText() không nói rằng clipboard được xóa, mặc dù có vẻ như vậy. –

4

Như Nick nói trong câu trả lời được chấp nhận: Bạn phải sử dụng DataObject (hoặc IDataObject) để sử dụng nhiều định dạng (nếu không thì mỗi cuộc gọi Set sẽ xóa bảng tạm đầu tiên).
Đây là một mẫu mã:

BitmapImage bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.UriSource = new Uri(img.DirectLink); 
bitmapImage.EndInit(); 

DataObject d = new DataObject(); 
d.SetImage(bitmapImage); 
d.SetText(img.DirectLink); 
Clipboard.SetDataObject(d); 
Các vấn đề liên quan