(三)对话框和Winform编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

话框和Winform编程一、ActiveX组件二、组件-事件-委托三、为属性控件添加窗口四、自定义组件的设计五、C#对话框全接触六、打造平滑的进度条七、WinForm组件八、C#事件处理机制九、父窗口及子窗口标题十、编写服务器日期控件十一、TreeView添加背景图一、ActiveX组件开发基于.Net平台上的程序员是很难从本质上把VisualC#和ActiveX组件联起来,虽然在使用VisualC#开发应用程序时,有时为了快速开发或者由于.NetFrameWorkSDK的不完整,还需要借助ActiveX。但即使如此,也很难把二者联系起来。其中的原因就是能够被VisualC#直接使用文件和通过VisualC#生成的可执行程序只可能是托管的文件。而ActiveX组件却都是非托管文件。这种文件的差异决定了二者本质对立。于是这就引出了本文第一个问题,ActiveX和VisualC#到底是何种关系。一.VisualC#和ActiveX组件:此时可能有些朋友会说,既然能够被VisualC#直接使用只能是托管代码文件,那在VisualC#中提供的可直接通过引用调用ActiveX又是怎么回事?的确VisualC#提供了引用ActiveX组件的操作,这种操作有效的利用了很多以前资源,使得这些资源并没有随着微软推出.Net平台而由于平台的差异被抛弃,但这种在VisualC#中引入ActiveX组件的操作其实并不被微软公司所倡导,也不符合微软推出.Net的最终目的。这是因为微软之所以推出.Net是为了实现跨平台,为了实现WriteOnceandRunAnywhere,写一遍代码,可以在任何平台上运行的目的。如果程序中使用了ActiveX组件,这也就从另一方面决定了此程序只能在Windows平台上使用,也就无法实现微软的WriteOnceandRunAnywhere最终目标了。再者VisualC#提供的引用ActiveX组件的操作,其实ActiveX组件被加入VisualC#的工具箱时,VisualStuio.Net其实对ActiveX组件进行了很多操作,而这些操作又都被VisualC#隐藏了,使用者往往并不完全清楚。这些操作的作用就是把非托管的ActiveX组件转换成托管的组件,这些操作统称互操作,细心的程序员可能就会发现,当往程序窗体中拖入ActiveX组件后,源程序所在目录的Bin目录中就会新增若干个Dll文件,这些文件就是ActiveX组件进行互操作转换后生成的。此时在VisualC#使用的并不是ActiveX组件,而是由ActiveX组件进行互操作得到可供.Net平台使用的、功能和原先ActiveX组件相同的类库了。既然在VisualC#中不能直接使用ActiveX组件,那种看似在VisualC#中使用的ActiveX组件其实使用的是经过了互操作后转换的类库。那么VisualC#是否能够生成ActiveX组件?本文就来探讨一下VisualC#中生成ActiveX组件的实现方法。制作的方法就是首先通过VisualC#创建一个Windows组件,然后把其接口以COM形式发布即可。二.本文中介绍的程序设计及运行环境:(1).微软视窗2000服务器版。(2).VisualStudio.Net2003企业结构版,.NetFrameworkSDK4322。三.使用VisualC#创建Windows组件:以下是使用VisualC#创建一个Windows组件的实现步骤:1.启动VisualStudio.Net。2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。3.将【项目类型】设置为【VisualC#项目】。4.将【模板】设置为【类库】。5.在【名称】文本框中输入【ActiveXDotNet】。6.在【位置】的文本框中输入【C:\Class】,然后单击【确定】按钮,则VisualC#则在C:\Class目录中创建ActiveXDotNet文件夹,里面存放的是ActiveXDotNet项目文件,具体如图01所示:图01:创建类库的【新建项目】对话框7.选择【解决方案资源管理器】窗口,并从中上传Class1.cs文件,因为此文件在本程序中已经没有用途了。8.选择【项目】|【添加组件】后,弹出【添加新项】对话框,在此对话框中设定【模板】为组件类,设定【名称】值为MyControl.cs后,单击【打开】按钮。则在项目文件中新增一个名称MyControl.cs的文件。具体如图02所示:图02:在项目中【添加新项】对话框9.把VisualStudio.Net的当前窗口切换到【MyControl.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往设计窗体中按顺序拖入下列组件:一个GroupBox组件,并向此组件中再拖入,一个TextBox组件和一个Lable组件。10.把VisualStudio.Net的当前窗口切换到【MyControl.cs】代码编辑窗口,并用下列代码替换MyControl.cs中的InitializeComponent过程,下列代码是初始化上述加入的组件:privatevoidInitializeComponent(){this.groupBox1=newSystem.Windows.Forms.GroupBox();this.txtUserText=newSystem.Windows.Forms.TextBox();this.label1=newSystem.Windows.Forms.Label();this.groupBox1.SuspendLayout();this.SuspendLayout();this.groupBox1.Controls.Add(this.txtUserText);this.groupBox1.Controls.Add(this.label1);this.groupBox1.Location=newSystem.Drawing.Point(8,8);this.groupBox1.Name=groupBox1;this.groupBox1.Size=newSystem.Drawing.Size(272,56);this.groupBox1.TabIndex=0;this.groupBox1.TabStop=false;this.groupBox1.Text=VisualStudio.Net创建的ActiveX组件;this.txtUserText.Enabled=false;this.txtUserText.Location=newSystem.Drawing.Point(84,20);this.txtUserText.Name=txtUserText;this.txtUserText.Size=newSystem.Drawing.Size(180,21);this.txtUserText.TabIndex=1;this.txtUserText.Text=;this.label1.Location=newSystem.Drawing.Point(8,24);this.label1.Name=label1;this.label1.Size=newSystem.Drawing.Size(66,16);this.label1.TabIndex=0;this.label1.Text=输入信息:;this.Controls.Add(this.groupBox1);this.Name=MyControl;this.Size=newSystem.Drawing.Size(288,72);this.groupBox1.ResumeLayout(false);this.ResumeLayout(false);}至此【ActiveXDotNet】项目创建的ActiveX组件的界面就基本完成了,具体如图03所示:图03:【ActiveXDotNet】项目创建的ActiveX组件的设计界面11.在MyControl.cs中的【MyControl的摘要说明】代码区中添加下列代码,以下代码是定义一个公用的接口,此接口是告诉COM/COM+,这儿有一个公用的属性可以进行读写操作:publicinterfaceAxMyControl{StringUserText{set;get;}}12.在MyControl.cs的【MyControl】class代码区中添加下列代码,以下代码是首先定义一个私有的字符串,用此字符串来保存从Web测试页面中传递来的数值定义一个公用属性,在接下来的Web测试页面中,将通过这个属性来传递数值,此属性是可读写:privateStringmStr_UserText;publicStringUserText{get{returnmStr_UserText;}set{mStr_UserText=value;//修改组件的数值txtUserText.Text=value;}}13.保存上面的修改步骤,至此我们就利用VisualC#创建了一个名称为MyControl的class,这也就是用VisualC#封装的、酷似ActiveX组件的组件。14.单击快捷键【Ctrl+F5】,则VisualC#会自动完成编译,并在C:\Class\ActiveXDotNet\bin\Debug目录生成一个名称为ActiveXDotNet.dll文件,这就是产生的组件。以下是经过上述步骤产生的MyControl.cs的全部代码:usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Windows.Forms;namespaceActiveXDotNet{publicinterfaceAxMyControl{StringUserText{set;get;}}///<summary>///MyControl的摘要说明。///</summary>publicclassMyControl:System.Windows.Forms.UserControl,AxMyControl{///<summary>///必需的设计器变量。///</summary>privateSystem.ComponentModel.Containercomponents=null;privateSystem.Windows.Forms.GroupBoxgroupBox1;privateSystem.Windows.Forms.Labellabel1;privateSystem.Windows.Forms.TextBoxtxtUserText;privateStringmStr_UserText;publicStringUserText{get{returnmStr_UserText;}set{mStr_UserText=value;//修改组件的数值txtUserText.Text=value;}}publicMyControl(){//该调用是Windows.Forms窗体设计器所必需的。InitializeComponent();//TODO:在InitializeComponent调用后添加任何初始化}///<summary>///清理所有正在使用的资源。///</summary>protectedoverridevoidDispose(booldisposing){if(disposing){if(components!=null){components.Dispose();}}base.Dispose(disposing);}#region组件设计器生成的代码///<summary>///设计器支持所需的方法-不要使用代码编辑器///修改此方法的内容。///</summary>privatevoidInitializeComponent(){thi

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功