c#中创建用户控件后,子控件为其自动添加事件代码
2019/12/13
由于开发中业务信息的不确定性,今天制作了个usercontrol组件,该用户控件中添加了若干个子控件(如button、textbox、label),但是在winform应用程序中调用时,发现无法对其子控件(如button)进行单击自动生成button click事件代码的问题,通过google搜索了下,大致找到了解决方法,现在记录下来,仅作为开发笔记,如浏览本帖的人员有其他更好的方法,或者对其原理进行阐述的,可以留言,谢谢各位
测试代码
1.首先先创建usercontrol用户控件,具体如何创建各位可去进行google搜索,或者查找相关书籍教程
设计器文件 UserControl1.Designer.cs
-
namespace WindowsControlLibrary1
-
{
-
partial class UserControl1
-
{
-
-
-
-
private System.ComponentModel.IContainer components = null;
-
-
-
-
-
-
-
protected override void Dispose(bool disposing)
-
{
-
if (disposing && (components != null))
-
{
-
components.Dispose();
-
}
-
base.Dispose(disposing);
-
}
-
-
-
#region 组件设计器生成的代码
-
-
-
-
-
-
-
private void InitializeComponent()
-
{
-
this.button1 = new System.Windows.Forms.Button();
-
this.label1 = new System.Windows.Forms.Label();
-
this.textBox1 = new System.Windows.Forms.TextBox();
-
this.SuspendLayout();
-
-
-
-
this.button1.Location = new System.Drawing.Point(63, 69);
-
this.button1.Name = "button1";
-
this.button1.Size = new System.Drawing.Size(75, 23);
-
this.button1.TabIndex = 0;
-
this.button1.Text = "button1";
-
this.button1.UseVisualStyleBackColor = true;
-
-
-
-
this.label1.AutoSize = true;
-
this.label1.Location = new System.Drawing.Point(70, 114);
-
this.label1.Name = "label1";
-
this.label1.Size = new System.Drawing.Size(41, 12);
-
this.label1.TabIndex = 1;
-
this.label1.Text = "label1";
-
-
-
-
this.textBox1.Location = new System.Drawing.Point(63, 151);
-
this.textBox1.Name = "textBox1";
-
this.textBox1.Size = new System.Drawing.Size(100, 21);
-
this.textBox1.TabIndex = 2;
-
-
-
-
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
-
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-
this.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange;
-
this.Controls.Add(this.textBox1);
-
this.Controls.Add(this.label1);
-
this.Controls.Add(this.button1);
-
this.Name = "UserControl1";
-
this.Size = new System.Drawing.Size(269, 232);
-
this.ResumeLayout(false);
-
this.PerformLayout();
-
-
-
}
-
-
#endregion
-
-
-
public System.Windows.Forms.Button button1;
-
public System.Windows.Forms.Label label1;
-
public System.Windows.Forms.TextBox textBox1;
-
}
-
}
代码文件UserControl1.cs
-
using System;
-
using System.Collections.Generic;
-
using System.ComponentModel;
-
using System.Drawing;
-
using System.Data;
-
using System.Text;
-
using System.Windows.Forms;
-
-
namespace WindowsControlLibrary1
-
{
-
public partial class UserControl1 : UserControl
-
{
-
public UserControl1()
-
{
-
InitializeComponent();
-
}
-
}
-
}
2.需要将usercontrol中的子控件(如 button)属性中的Modifiers中的值改为Public
3.进行编译,编译成功将生成的usercontrol dll通过鼠标拖动工具箱中。
4.在该解决方案中,添加winform应用程序项目,然后将刚刚添加到工具箱中的usercontrol 控件拖动到winform窗体中
5.开始在winform应用程序中编写usercontrol 子控件(button)的单击事件代码
-
using System;
-
using System.Collections.Generic;
-
using System.ComponentModel;
-
using System.Data;
-
using System.Drawing;
-
using System.Text;
-
using System.Windows.Forms;
-
-
namespace WindowsApplication1
-
{
-
public partial class Form1 : Form
-
{
-
public Form1()
-
{
-
InitializeComponent();
-
}
-
-
private void userControl11_button1_Click(object sender, EventArgs e)
-
{
-
MessageBox.Show("userControl11 button1 Click");
-
}
-
-
private void Form1_Load(object sender, EventArgs e)
-
{
-
this.userControl11.button1.Click += userControl11_button1_Click;
-
}
-
}
-
}
6.编译winform应用程序,运行后点击usercontrol中的button即可看到效果。