知识大全 用Visual C#动态生成组件
Posted 事件
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Visual C#动态生成组件相关的知识,希望对你有一定的参考价值。
用Visual C#动态生成组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
通常在写程序的时候 当要用到某些组件 采用的方法一般都是动态创建 用完以后就释放掉 Visual C#在程序运行的时候也可以动态创建组件 下面就结合一个程序例子来具体介绍如何用Visual C#动态生成组件 首先让我们了解一下 在动态创建组件的过程中要用到的一些概论和理论
一. Boxing (装箱)和Unboxing (出箱) 在用Visual C#动态创建组件的时候 要涉及到二种数据类型变量的转换 这二种类型变量就是实值类型(Value Type)变量和参考类型(Reference Type)变量 而这种转换过程在Visual C#中被称为Boxing (装箱)和Unboxing (出箱) 其中把实值类型变量转换成参考类型变量就是Boxing (装箱) 把参考类型变量转换成实值类型变量就是Unboxing (出箱) 那么什么是实值类型 说的简单些 就是我们平常使用的整型 布尔型 枚举型等 这些类型的变量就是实值类型变量了 所谓参考类型 在Visual C#中指的就是Object Class Interface Delegate String Array等 他和实值类型最主要的不同之处就是 参考类型变量存放的是指向实体对象的指针 而实值类型变量却是实实在在地实体对象 在本文介绍的程序中 主要涉及的是出箱 具体的处理方法 在下面有着具体介绍 二. 程序设计中的关键步骤以及解决方法 文中软件主要功能是用通过窗体上的二个按钮来创建二个不同类型的WinForm组件 Button组件和TextBox组件 并在创建的同时为每一个组件的属性赋值 给每一个创建的组件也创建了事件 ( ) 如何在窗体上创建Button组件 其实用Visual C#创建一个组件是十分方便的 只用下列二行语句就可以完成了 //创建一个新的Button组件Button myButton = new Button ( ) ;//在窗体中显示此按钮this Controls Add ( myButton ) ;但此时创建的这个Button组件没有任何属性 并且也没有任何事件 在本文中介绍的程序中创建的Button组件 不仅有属性也有事件 下列语句就是本文程序创建Button组件源代码 //按钮数量计算器在每次按钮按动后加 counter += ;//对要产生的按钮的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加 locY += this btnAdd Height + ;//创建一个新的Button组件Button myButton = new Button ( ) ;//设定他的名称和Text属性 以及产生的相对位置myButton Name = Button + counter ;myButton Text = 按钮 + counter ;myButton Location = new Point ( btnAdd Location X locY ) ; //为产生的新的Button组件设定事件 本文中为产生的按钮设定了三个事件myButton MouseEnter += new System EventHandler ( this btn_MouseEnter ) ;myButton MouseLeave += new System EventHandler ( this btn_MouseLeave ) ;myButton Click += new System EventHandler ( this btn_Click ) ;//在窗体中显示此按钮this Controls Add ( myButton ) ; 程序不仅为每一个组件的属性都赋值 而且为每一个组件都创建了三个事件 细心的读者可能已经注意到 程序为每一个组件创建的事件的名称都是一样的 这样就有一个问题 如何在这一样的事件中 识别到底是哪个Button组件触发了事件 ( ) 确定是哪个组件触发了事件 由于程序中为每一个创建的Button组件的事件都是一样的 要想正确处理这些组件的事件 就需要在事件触发的程序中判断到底是哪个组件触发了这个事件 这就需要用到上面所提出的装箱和出箱 我们知道Sender对象是一个参考类型变量 他存放的是指向触发当前事件实体对象的指针 要把他给转换成实值对象类型 通过下列语句就可以确定是哪个组件触发了当前事件 private void btn_MouseEnter ( object sender System EventArgs e )//出箱Button currentButton = ( Button ) sender ;//设定按钮的背景色currentButton BackColor = Color Red ; 其他事件可以仿照此事件的处理过程来处理 ( ) 如何在窗体上创建TextBox组件 创建TextBox组件的过程和创建Button组件过程相类似 只是在创建的组件类型上面有一点区别 具体实现语句如下 //文本框数量计算器在每次按钮按动后加 counter += ;//对要产生的文本框的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加 locY += this txtAdd Height + ;//创建一个新的TextBox组件TextBox myBox = new TextBox ( ) ;//设定他的名称和Text属性 以及产生的位置myBox Name = TextBox + counter ;myBox Text = 文本框 + counter ;myBox Location = new Point ( txtAdd Location X locY ) ; //为产生的新的TextBox组件设定事件 本文中为产生的文本框设定了一个事件myBox Click += new System EventHandler ( this btn_Click ) ;//在窗体中显示此文本框this Controls Add ( myBox ) ; 此时细心的读者又会发现 为每一个TextBox组件创建Click事件和为Button组件创建的Click事件也是一样的 这样在Click事件中不仅要判断是哪个组件触发了事件 还要判断是那种类型的组件触发了事件 下面语句是实现这些判断地具体方法 private void btn_Click ( object sender System EventArgs e ) if ( sender GetType ( ) == typeof ( Button ) ) Button control = ( Button ) sender ; MessageBox Show ( control Text + 被按动了! ); else TextBox control = ( TextBox ) sender ; MessageBox Show ( control Text + 被按动了! ) ; 当然如果你也可以单独为TextBox组件创建Click事件 此时创建的事件语句可改为 myBox Click += new System EventHandler ( this txt _Click ) ;
下面是实现txt _Click ( )事件的程序代码 private void txt_Click ( object sender System EventArgs e ) TextBox currentButton = ( TextBox ) sender ; MessageBox Show ( currentButton Text + 被按动了! );
三. 本文中源程序已经程序运行的界面 下面这些图是程序运行
图 程序中动态创建了组件 图 单击创建的按钮的结果图
图 单击创建的文本框的结果图
下面是实现上面结果的程序源代码 using System ;using System Drawing ;using System Collections ;using System ComponentModel ;using System Windows Forms ;using System Data ;namespace DynamicControlspublic class Form : Formprivate Button btnAdd ;private System ComponentModel Container ponents = null ;private Button txtAdd ;//给产生的按钮定义一个数量计算器private int counter ;//给产生的按钮定义相对位置的纵坐标private int locY ;//给产生的文本框定义一个数量计算器private int counter ;//给产生的文本框定义相对位置的纵坐标private int locY ;public Form ( )InitializeComponent ( ) ;//初始化产生的按钮何文本框位置的纵坐标locY = this btnAdd Location Y ;locY = this txtAdd Location Y ;
//清除在程序中使用到的资源protected override void Dispose ( bool disposing )if ( disposing )if ( ponents != null ) ponents Dispose ( ) ;base Dispose ( disposing ) ;
private void InitializeComponent ( )this btnAdd = new Button ( ) ;this txtAdd = new Button ( ) ;this SuspendLayout ( ) ;
this btnAdd FlatStyle = FlatStyle Popup ;this btnAdd Location = new System Drawing Point ( ) ;this btnAdd Name = btnAdd ;this btnAdd TabIndex = ;this btnAdd Text = 生成按钮! ;this btnAdd Click += new System EventHandler ( this btnAdd_Click ) ;
this txtAdd FlatStyle = FlatStyle Popup ;this txtAdd Location = new System Drawing Point ( ) ;this txtAdd Name = txtAdd ;this txtAdd TabIndex = ;this txtAdd Text = 生成文本框! ;this txtAdd Click += new System EventHandler ( this txtAdd_Click ) ;
this AutoScaleBaseSize = new System Drawing Size ( ) ;this ClientSize = new System Drawing Size ( ) ;this Controls Add ( btnAdd ) ;this Controls Add ( txtAdd ) ;this Name = Form ;this Text = 在Visual C#中如何动态产生组件! ;this ResumeLayout ( false ) ;
static void Main ( ) Application Run ( new Form ( ) ) ;private void btnAdd_Click ( object sender System EventArgs e )//按钮数量计算器在每次按钮按动后加 counter += ;//对要产生的按钮的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加 locY += this btnAdd Height + ;//创建一个新的Button组件Button myButton = new Button ( ) ;//设定他的名称和Text属性 以及产生的位置myButton Name = Button + counter ;myButton Text = 按钮 + counter ;myButton Location = new Point ( btnAdd Location X locY ) ;
//为产生的新的Button组件设定事件 本文中为产生的按钮设定了三个事件myButton MouseEnter += new System EventHandler ( this btn_MouseEnter ) ;myButton MouseLeave += new System EventHandler ( this btn_MouseLeave ) ;myButton Click += new System EventHandler ( this btn_Click ) ;//在窗体中显示此按钮this Controls Add ( myButton ) ;
private void txtAdd_Click ( object sender System EventArgs e )//文本框数量计算器在每次按钮按动后加 counter += ;//对要产生的文本框的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加 locY += this txtAdd Height + ;//创建一个新的TextBox组件TextBox myBox = new TextBox ( ) ;//设定他的名称和Text属性 以及产生的位置myBox Name = TextBox + counter ;myBox Text = 文本框 + counter ;myBox Location = new Point ( txtAdd Location X locY ) ; //为产生的新的TextBox组件设定事件 本文中为产生的文本框设定了一个事件myBox Click += new System EventHandler ( this btn_Click ) ;//在窗体中显示此文本框this Controls Add ( myBox ) ;private void btn_MouseEnter ( object sender System EventArgs e ) //出箱 Button currentButton = ( Button ) sender ; //设定按钮的背景色 currentButton BackColor = Color Red ;
private void btn_MouseLeave ( object sender System EventArgs e ) //出箱 Button currentButton = ( Button ) sender ; currentButton BackColor = Control DefaultBackColor ;
private void btn_Click ( object sender System EventArgs e ) if ( sender GetType ( ) == typeof ( Button ) ) Button control = ( Button ) sender ; MessageBox Show ( control Text + 被按动了! ); else TextBox control = ( TextBox ) sender ; MessageBox Show ( control Text + 被按动了! ) ;
cha138/Article/program/net/201311/11981
相关参考
C#编程实现动态生成Word文档 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何用C#编程实
知识大全 用Visual C#调用Windows API函数
用VisualC#调用WindowsAPI函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A
用VisualC#.NET开发简单的复合控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 内容
新建类库MyTestDLL 右击项目“MyTestDLL”》属性》生成》勾选“为互操作注册” 打开 AssemblyInfocs&nb
用导航组件来构建动态Portal菜单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介Grid
VisualBasic.NET中组件的叠加使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 状
用C#生成不重复的随机数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我们在做能自动生成试卷的
在Asp.net用C#建立动态Excel 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在中建立
VisualC#接口转换 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#中不仅支持Net平台
知识大全 Visual C#或Visual Basic创建Web应用程序(上)
VisualC#或VisualBasic创建Web应用程序(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起