使用剪贴板保存自定义对象

时间:2024-05-22 20:17:47
技术要点:

放置到剪贴板上的对象必须是可序列化的。

剪贴板接收一个实现了IDataObject接口的对象,可以用此对象“包装”具体的数据对象。

可以多次调用IDataObject. SetData方法将多种类型的对象复制到剪贴板中。在获取剪贴板中的数据时通过DataFormat进行识别

在进行粘贴之前,需要确保剪贴板上的数据是所需要的格式。

使用剪贴板保存自定义对象

using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Runtime.Serialization; namespace UseClipboard { [Serializable] class MyPic { public Image pic; //图片 public string picInfo; //图片信息说明 } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace UseClipboard { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } //图片 private Image bmp { get { return pictureBox1.Image; } set { pictureBox1.Image = value; } } //图片说明 private string info { get { return txtImageInfo.Text; } set { txtImageInfo.Text = value; } } private void btnLoadPic_Click(object sender, EventArgs e) { ChooseImageFile(); } //选择图片 private void ChooseImageFile() { if (openFileDialog1.ShowDialog() == DialogResult.OK) { string name = openFileDialog1.FileName; txtImageInfo.Text = name; bmp = new Bitmap(name); } } //根据用户设定的信息创建对象 private MyPic CreateMyPicObj() { MyPic obj = new MyPic(); obj.pic = bmp; obj.picInfo = info; return obj; } //将对象复制到剪贴板上 private void CopyToClipboard() { //创建MyPic对象 MyPic obj = CreateMyPicObj(); //创建一个数据对象,将MyPic类型的对象装入 IDataObject dataobj = new DataObject(obj); //其它类型的数据也可以装入到数据对象中 dataobj.SetData(DataFormats.UnicodeText, info); dataobj.SetData(DataFormats.Bitmap, bmp); //复制到剪贴板上,第二个参数表明程序退出时不清空剪贴板 Clipboard.SetDataObject(dataobj,true ); } private void btnExit_Click(object sender, EventArgs e) { Close(); } private void btnCopyToClipboard_Click(object sender, EventArgs e) { CopyToClipboard(); } //从剪贴板获取数据 private void PasteFromClipboard() { //剪贴板上有我需要的数据吗?格式为“项目名称.数据格式名” if (Clipboard.ContainsData("UseClipboard.MyPic") == false)//根据指定的DataFormat获取数据对象 return; //读取数据 IDataObject clipobj = Clipboard.GetDataObject(); //将数据转换为需要的类型 MyPic mypicobj = clipobj.GetData("UseClipboard.MyPic") as MyPic; //从数据对象中分解出需要的数据 info = mypicobj.picInfo; pictureBox1.Image = mypicobj.pic; if (Clipboard.ContainsData(DataFormats.UnicodeText) == false)//根据指定的DataFormat获取数据对象 return; string str = clipobj.GetData(DataFormats.UnicodeText) as string; MessageBox.Show(str); } private void btnPasteFromClipboard_Click(object sender, EventArgs e) { PasteFromClipboard(); } } }

相关文章