剪贴板上一般放置的都是由DataFormats类定义好的数据类型,其实我们也可以定义自己的数据类型。
创建自己写的类的对象,再将该对象在程序与剪贴板之间传来传去,挺有意思哦

代码中已有注释,不再做说明。

先创建一个类,用作表达数据信息:


 1using System;
 2
 3namespace SimpleTest
 4{
 5 /// <summary>
 6 /// UserInfo 的摘要说明。
 7 /// </summary>

 8 [Serializable]//必须给此类加上这个标志,表明此类是可以序列化的(即可以将此类创建的对象转换为数据流)
 9 public class UserInfo
10 {
11  public UserInfo()
12  {
13   //
14   // TODO: 在此处添加构造函数逻辑
15   //
16  }

17  public string Name = "余智学";
18  public bool IsMan = true;
19  public int Age = 20;
20  public DateTime Birthday = new DateTime(1986,1,1);
21 }

22}

23
24


实现功能的窗体:


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Data.SqlClient;

namespace SimpleTest
{
    
/// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
{
        
private System.Windows.Forms.Button btnCopyToClipboard;
        
private System.Windows.Forms.Button btnPasteFromClipboard;
        
private System.Windows.Forms.TextBox txtName;
        
private System.Windows.Forms.RadioButton rdoIsMan;
        
private System.Windows.Forms.NumericUpDown numAge;
        
private System.Windows.Forms.DateTimePicker dtpBirthday;
        
private System.Windows.Forms.RadioButton rdoIsWoman;
        
/// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form1()
        
{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if (components != null
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        
Windows 窗体设计器生成的代码

        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main() 
        
{
            Application.Run(
new Form1());
        }

        
/// <summary>
        
/// 根据窗体上各个控件的值创建UserInfo对象
        
/// </summary>
        
/// <returns></returns>

        private UserInfo CreateObj()
        
{
            UserInfo obj 
= new UserInfo();
            obj.Name 
= this.txtName.Text;
            obj.IsMan 
= this.rdoIsMan.Checked;
            obj.Age 
= (int)this.numAge.Value;
            obj.Birthday 
= this.dtpBirthday.Value;
            
return obj;
        }

        
/// <summary>
        
/// 在窗体上显示UserInfo对象
        
/// </summary>
        
/// <param name="obj"></param>

        private void ShowObjInForm(UserInfo obj)
        
{
            
if(obj != null)
            
{
                
this.txtName.Text = obj.Name;
                
this.rdoIsMan.Checked = obj.IsMan;
                
this.rdoIsWoman.Checked = !obj.IsMan;
                
this.numAge.Value = obj.Age;
                
this.dtpBirthday.Value = obj.Birthday;
            }

        }

        
private void btnCopyToClipboard_Click(object sender, System.EventArgs e)
        
{
            UserInfo obj 
= this.CreateObj();
            
//申请注册一个新的Clipboard数据格式
            DataFormats.Format UserInfoFormat = DataFormats.GetFormat("UserInfo");
            
//将对象包容到DataObj中
            IDataObject myDataObj = new DataObject(obj);
            
//复制到剪贴板,并在退出程序时仍然保存
            Clipboard.SetDataObject(myDataObj,true);
            MessageBox.Show(
"对象已复制到剪贴板!");
        }

        
private void btnPasteFromClipboard_Click(object sender, System.EventArgs e)
        
{
            
//从剪贴板中提取对象
            IDataObject retObj = Clipboard.GetDataObject();
            
//判断剪贴板上的数据是否是UserInfo类型的
            if(retObj.GetDataPresent("SimpleTest.UserInfo"))
            
{
                
//获取UserInfo对象
                UserInfo obj = retObj.GetData("SimpleTest.UserInfo"as UserInfo;
                
//在窗体上显示对象
                this.ShowObjInForm(obj);
            }

            
else
            
{
                MessageBox.Show(
"不支持的数据格式!");
            }

        }

        
private void Form1_Load(object sender, System.EventArgs e)
        
{
            ShowObjInForm(
new UserInfo());
        }
            
        
    }

}
posted on 2007-04-05 18:07  大口仔  阅读(420)  评论(0编辑  收藏  举报

使用Live Messenger联系我
关闭