2012-08-14 37 views
5

Clipboard.SetText("") ném cho tôi lỗi - "Giá trị không thể rỗng". Vậy làm thế nào để sao chép một chuỗi rỗng bằng cách sử dụng Clipboard.SetText?Sao chép chuỗi rỗng bằng Clipboard.SetText (chuỗi)

Tôi đã thực hiện Clipboard.Clear(). Nó không xóa clipboard, nhưng nó không giúp tôi dán một chuỗi rỗng

Bất kỳ đề xuất nào?

+0

Tại sao bạn cần dán chuỗi rỗng? Bạn có cần dán dòng mới không? – JleruOHeP

+1

Có lẽ vấn đề tương tự như tôi: anh ấy muốn giữ cho nó đẹp và đơn giản mà không có trường hợp đặc biệt khi lựa chọn là một chuỗi rỗng. Tôi tò mò muốn biết nếu có một lý do kỹ thuật để ngăn chặn một chuỗi rỗng khi một chuỗi "bình thường" được cho phép. –

Trả lời

6

Nếu bạn cố gắng lưu null hoặc một chuỗi rỗng bằng cách sử dụng Clipboard.SetText nó sẽ không bao giờ hoạt động.

Xem Clipboard.SetText Method (String) (MSDN). Nó đề cập đến ArgumentNullException được ném nếu văn bản là null hoặc Empty cho Clipboard.SetText.

Do đó bạn không thể đạt được những gì bạn đang cố gắng đạt được.

+4

Vi phạm POLA nếu tôi đã từng thấy;) "Chúng tôi ném một đối số * Null * Ngoại lệ cho các giá trị không null" ... whut ?! –

8

Tôi nghĩ rằng bạn cần phải làm

Clipboard.Clear() 

Từ MSDN

Xóa bất kỳ dữ liệu từ Clipboard của hệ thống.

+0

Đó là câu trả lời hữu ích hơn. –

1

Tham chiếu PresentationCore và gọi System.Windows.Clipboard.SetText(string) thay vì System.Windows.Forms.Clipboard.SetText(string). Tôi đã sử dụng clipview để xác minh rằng System.Windows.Clipboard.SetText(""); (không ném ngoại lệ) lưu chuỗi rỗng vào khay nhớ tạm.

Phương pháp này giúp bạn tiết kiệm từ việc phải có điều kiện gọi Clear() hoặc SetText() tùy thuộc vào chuỗi bạn đang cố gắng đặt hiệu quả vào khay nhớ tạm. Điều này đặc biệt hữu ích nếu bạn đang cố gắng viết mã để đặt bảng tạm thành bất kỳ giá trị chuỗi nào mà không biết trước chuỗi có cần phải được hỗ trợ hay không. Tức là, phương pháp này cho phép bạn tránh điều trị chuỗi rỗng như một trường hợp đặc biệt (IMO, nó không phải là một trường hợp đặc biệt bởi vì điều đó chỉ gây nhầm lẫn).

Ngoài ra, như có thể thấy bằng clipview, Clear() thực sự làm trống khay nhớ tạm thay vì đặt một chuỗi trống trong đó. Gọi System.Windows.Clipboard.SetText("") thực sự đặt một giá trị chuỗi rỗng vào clipboard. Khi bạn dán, ứng dụng đích có thể cho biết sự khác biệt và thực sự hoạt động khác nếu nó muốn.

+0

Re: * "Tham chiếu' PresentationCore.dll' "*: Hoặc có lẽ chỉ cần sử dụng' PresentationCore' trong tab ".NET" (tab đầu tiên)? –

+0

Khi tôi thử điều này, với 'System.Windows.Clipboard.SetText() ', tôi có một ngoại lệ ** cho một chuỗi rỗng ** (như đối với' Forms'), nhưng không có ngoại lệ cho một chuỗi không rỗng. Nó phụ thuộc vào phiên bản .NET? C# phiên bản? "Đường dẫn" trong tham chiếu "PresentationCore" (dưới *** Tham chiếu *** trong dự án C#) là: 'C: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ Framework \ v3.0 \ PresentationCore.dll' –

+0

@PeterMortensen Tôi có cùng một đường dẫn trong Tài liệu tham khảo. Tôi đang chạy Windows 10 xây dựng 15007 mà tuyên bố có .net-4.7 mà còn dưới "Bật hoặc tắt tính năng Windows" nó nói tôi có .net-3.5, vì vậy tôi nghĩ rằng khi tôi nhắm mục tiêu .net-3.5 nó thực sự đang chạy trên .net-3.5 nhưng nó có lẽ là phiên bản vá mới nhất. Tôi không thể tìm ra cách để có được 'System.Windows.Clipboard.SetText()' để ném vào chuỗi rỗng. Bạn có chắc là bạn không thực sự chuyển nó 'null' thay vì một chuỗi rỗng? – binki

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