转载:用Visual C#动态生成组件,请看!(三)
文章来源:
文章作者: 发布时间:2006-03-28
下面是实现上面结果的程序源代码:
using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
{
public class Form1 : Form
{
private Button btnAdd ;
private System.ComponentModel.Container components = null ;
private Button txtAdd ;
//给产生的按钮定义一个数量计算器
private int counter ;
//给产生的按钮定义相对位置的纵坐标
private int locY ;
//给产生的文本框定义一个数量计算器
private int counter01 ;
//给产生的文本框定义相对位置的纵坐标
private int locY1 ;
public Form1 ( )
{
InitializeComponent ( ) ;
//初始化产生的按钮何文本框位置的纵坐标
locY = this.btnAdd.Location.Y ;
locY1 = this.txtAdd.Location.Y ;
}
//清除在程序中使用到的资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.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 ( 8 , 16 ) ;
this.btnAdd.Name = "btnAdd" ;
this.btnAdd.TabIndex = 0 ;
this.btnAdd.Text = "生成按钮!" ;
this.btnAdd.Click = new System.EventHandler ( this.btnAdd_Click ) ;
this.txtAdd.FlatStyle = FlatStyle.Popup ;
this.txtAdd.Location = new System.Drawing.Point ( 108 , 16 ) ;
this.txtAdd.Name = "txtAdd" ;
this.txtAdd.TabIndex = 1 ;
this.txtAdd.Text = "生成文本框!" ;
this.txtAdd.Click = new System.EventHandler ( this.txtAdd_Click ) ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
this.ClientSize = new System.Drawing.Size ( 292 , 273 ) ;
this.Controls.Add ( btnAdd ) ;
this.Controls.Add ( txtAdd ) ;
this.Name = "Form1" ;
this.Text = "在Visual C#中如何动态产生组件!" ;
this.ResumeLayout ( false ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void btnAdd_Click ( object sender , System.EventArgs e )
{
//按钮数量计算器在每次按钮按动后加"1"
counter = 1 ;
//对要产生的按钮的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加"3"
locY = this.btnAdd.Height 3 ;
//创建一个新的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 )
{
//文本框数量计算器在每次按钮按动后加"1"
counter01 = 1 ;
//对要产生的文本框的纵坐标的相对位置是前一个产生按钮的相对位置的纵坐标加"3
locY1 = this.txtAdd.Height 3 ;
//创建一个新的TextBox组件
TextBox myBox = new TextBox ( ) ;
//设定他的名称和Text属性,以及产生的位置
myBox.Name = "TextBox " counter01 ;
myBox.Text = "文本框 " counter01 ;
myBox.Location = new Point ( txtAdd.Location.X , locY1 ) ;
//为产生的新的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 "被按动了!" ) ;
}
}
}
}
五. 总结:
通过上面介绍,不难看出,动态创建组件并不是一件很难的事情,难就难在为这个组件创建事件上面,因为这涉及到实值类型变量和参考类型变量的转换,这就是所谓的装箱和出箱的问题。当然在程序设计的时候,你不仅可以创建那些可见的组件,也可以创建那些不可见的组件,具体的实现方法和本文中的方法类似。
上一篇:转载:用Visual C#动态生成组件,请看!(二)
下一篇:字符串截取固定长度的方法(C#)
精彩推荐
[技巧]·诺基亚S60机友必看——蓝牙的应用
[技巧]·用玩转手机实现摩托A1000于电脑同步
[技巧]·关于V902如何使用3GP为来电铃声方法
[新机]·完美结合 索爱滑盖音乐手机W580图赏
[新机]·延续经典 诺基亚神秘翻盖6131i曝光
[新机]·大屏王者 多普达智能新机D805曝光
[新机]·时尚风格 松下P904i精美广告壁纸欣赏
[新机]·苹果iPhone终上市 海量开箱照片抢先欣
[行情]·S型曲线 联想时尚折叠机S9仅售1480
[行情]·镜面美人 联想女性超薄翻盖S9仅1399
[行情]·畅所欲言 飞利浦待机王9@9s仅1398元
[行情]·创意无限 LG滑盖音乐机KE608跌破两千
[行情]·天籁之音 索爱音乐强机W810c只1890元
[技巧]·用玩转手机实现摩托A1000于电脑同步
[技巧]·关于V902如何使用3GP为来电铃声方法
[新机]·完美结合 索爱滑盖音乐手机W580图赏
[新机]·延续经典 诺基亚神秘翻盖6131i曝光
[新机]·大屏王者 多普达智能新机D805曝光
[新机]·时尚风格 松下P904i精美广告壁纸欣赏
[新机]·苹果iPhone终上市 海量开箱照片抢先欣
[行情]·S型曲线 联想时尚折叠机S9仅售1480
[行情]·镜面美人 联想女性超薄翻盖S9仅1399
[行情]·畅所欲言 飞利浦待机王9@9s仅1398元
[行情]·创意无限 LG滑盖音乐机KE608跌破两千
[行情]·天籁之音 索爱音乐强机W810c只1890元
相关新闻
相关链接
