The clipboard is where your data is stored when you copy or cut some text or an
image or a file or a folder. The clipboard is common across processes, which
means we can use the clipboard as a mechanism to transfer data between two
processes. Win32 gave us a Clipboard API with functions like
GetClipboardData which most of you might be familiar with. In .NET Microsoft
has encapsulated the functionality of most of these functions into some
classes. The most prominent of these classes is a class which has
been named aptly as
Clipboard. It's a very simple class with just
two functions. In this article, we'll see how to copy/paste text, images
and also how to maintain clipboard data in multiple formats.
I'd like to thank James Johnson for his amazing help while I
was fiddling with the clipboard. I didn't have a reference book to help
me, but that didn't matter much as James more than made up for it. Poor Mike Dunn had to suffer some .NET talk when he walked into
Bob's HungOut just as I was discussing an issue with James. Anyway
let's get on with things now.
Copying text into the clipboard
Clipboard class has a
function which is used to insert clipboard data. It takes an
argument in the single argument overload. In the other overload it takes
Object and a
bool variable, which we can set
true if we want the clipboard to persist even
after our application has exited. In our example program we'll use the
second overload as that seems to be the more common situation, where we
would want other programs to access what we have copied onto the
Retrieving text from the clipboard
Clipboard class also has a
GetDataObject function which returns an
IDataObject interface has a function called
GetDataPresent which we use to determine if the
IDataObject has data of a specific format. We can
use the static fields of the
DataFormats class to
verify that the format we expect is indeed available in the
true, we can then use the
function to retrieve the data format that we are expecting.
textBox1.Text = Clipboard.GetDataObject().GetData(DataFormats.Text).ToString();
textBox1.Text = "The clipboad does not contain any text";
Observe how I have copied some text from Notepad and pasted it into
our sample program. You can also copy text from our program and paste it
into Notepad. And I hope you like my XP theme and colors as well.
Copying/Retrieving images from the Clipboard
This is exactly the same as in copying and pasting text except that
we use the
format instead of
pictureBox1.Image = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
I have copied from Paint Brush into our sample program. You can then
copy something else using Paint Brush, come back to our program, copy
the image and paste back into Paint Brush. The image has stretched a bit
because I have set the
SizeMode property of
the Picture control to
Maintain multiple formats in the Clipboard
There are situations where you are not sure what kind of data the
target application of a copy/paste cycle is expecting in the clipboard.
In such cases we can maintain multiple data formats in the clipboard, so
that the target application can retrieve the data format it's expecting.
In our sample, we'll copy both the text in the edit box as well as the
image in the picture control into the clipboard. Now you can open Notepad
and paste into it the text as well as open Paint Brush and paste into it
the bitmap. I have provided a [Paste Both] button for ease of
demonstration. Just run a second instance of the sample program and we
can paste both the text and the image into the respective controls.
We make use of the
DataObject class which
IDataObject interface. We call the
SetData function twice, each time passing in a
different format data. We use the following override of the function :-
public virtual void SetData(
string format, bool autoConvert, object data );
The code is very straightforward. We create a
SetData twice, once with the text and
then with the image, then we add this
DataObject m_data = new DataObject();
Now you can paste both into Notepad as well as into any Graphics
application that allows you to paste a Bitmap into it.
Nish is a real nice guy who has been writing code since 1990 when he first got his hands on an 8088 with 640 KB RAM. Originally from sunny Trivandrum in India, he has been living in various places over the past few years and often thinks it’s time he settled down somewhere.
Nish has been a Microsoft Visual C++ MVP since October, 2002 - awfully nice of Microsoft, he thinks. He maintains an MVP tips and tricks web site - www.voidnish.com
where you can find a consolidated list of his articles, writings and ideas on VC++, MFC, .NET and C++/CLI. Oh, and you might want to check out his blog on C++/CLI, MFC, .NET and a lot of other stuff - blog.voidnish.com
Nish loves reading Science Fiction, P G Wodehouse and Agatha Christie, and also fancies himself to be a decent writer of sorts. He has authored a romantic comedy Summer Love and Some more Cricket
as well as a programming book – Extending MFC applications with the .NET Framework
Nish's latest book C++/CLI in Action
published by Manning Publications is now available for purchase. You can read more about the book on his blog.
Despite his wife's attempts to get him into cooking, his best effort so far has been a badly done omelette. Some day, he hopes to be a good cook, and to cook a tasty dinner for his wife.