由于开发中业务信息的不确定性,今天制作了个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即可看到效果。