通过代码添加的控件的事件如何编写?

0 背景

这两天在重新复习事件,比如Winform控件的事件,利用vs很方便地实现。比如:想要在窗体加载时,修改窗口的标题;我们只需要双击Form1的标题栏即可;

vs便会给我们生成如下代码,且光标自动定位到方法体中:

 private void Form1_Load( object sender, EventArgs e ) {

        }

然后我们在方法体中写上修改窗口标题的代码:

 private void Form1_Load( object sender, EventArgs e ) {
            this.Text = "通过代码添加的控件的事件";
        }

运行即可看到效果:

然后我在想,如果是我通过代码添加的控件,比如一个button1,一个texbox1控件,那么在设计时虚拟窗体并不能看到他们,我怎么给他添加事件呢?
为了形成对比我们,在Form1窗体上除了代码添加的一个button1,一个texbox1控件,再手动拖拽一个button2控件;

1 给窗体添加3个控件

(1)button2直接在虚拟窗体直接上从工具箱拖上去;

(2)重点说明下代码自动生成的button1和textbox1;代码如下:

先定义一个私有方法:

 private void CreatFormLayout(Form form,out TextBox tBox,out Button bton ) {
            TextBox textBox = new TextBox( );
            Button button = new Button( );
            textBox.Location = new Point( 1,1);
            textBox.Multiline = true;
            textBox.Size = new Size( 500,200);
            textBox.Font = new Font("正楷",24f);
            button.Location = new Point( 1,210);
            button.Size = new Size( 300,80);
            button.Text = "我是代码自动生成的按钮,请按我!";
            tBox = textBox;//textBox输出到对象tBox
            bton = button;//button输出对象到bton
            form.Controls.Add( textBox);
            form.Controls.Add( button);
        }

在Main主程序中调用:

public partial class Form1 : Form
    {
        private TextBox textBox1;//定义控件字段接受代码输出的控件
        private Button button1;
        public Form1( ) {


            InitializeComponent( );

            CreatFormLayout(this, out textBox1, out button1);

2 给代码添加的button1添加事件:

this.button1.Click += Button1_Click;//事件的第四步——挂接事件

Note:小窍门——

------>
------>

我们在button1的事件处理器(响应事件的方法)中写入代码:

            this.textBox1.Font = new Font("华文新魏", 22.2f, FontStyle.Bold);
            this.textBox1.Text = "我响应了button1按下的事件。";

点击button1,就是代码自动生成的那个按钮:

点击查看完整示例代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        private TextBox textBox1;//定义控件字段接受代码输出的控件
        private Button button1;
        public Form1( ) {


            InitializeComponent( );

            CreatFormLayout(this, out textBox1, out button1);
            this.button1.Click += Button1_Click1;//事件的第四步——挂接事件

            this.textBox1.Text = "我是代码生成的textbox";
        }

        private void Button1_Click1( object sender, EventArgs e ) {
            this.textBox1.Font = new Font("华文新魏", 22.2f, FontStyle.Bold);
            this.textBox1.Text = "我响应了button1按下的事件。";
        }

        private void CreatFormLayout(Form form,out TextBox tBox,out Button bton ) {
            TextBox textBox = new TextBox( );
            Button button = new Button( );
            textBox.Location = new Point( 1,1);
            textBox.Multiline = true;
            textBox.Size = new Size( 500,200);
            textBox.Font = new Font("正楷",24f);
            button.Location = new Point( 1,210);
            button.Size = new Size( 300,80);
            button.Text = "我是代码自动生成的按钮,请按我!";
            tBox = textBox;//textBox输出到对象tBox
            bton = button;//button输出对象到bton
            form.Controls.Add( textBox);
            form.Controls.Add( button);
        }

        private void button2_Click( object sender, EventArgs e ) {
            this.textBox1.Text = "我是button2按下。";
        }

        private void Form1_Load( object sender, EventArgs e ) {
            this.Text = "通过代码添加的控件的事件";
            button2.Size = new Size(300, 80);
            button2.Location = new Point(1, 300);
        }
    }
}

posted @ 2024-08-19 16:47  Stephen_Young  阅读(15)  评论(0编辑  收藏  举报