欢迎光临
我们一直在努力

C#WinForm Label控件+TextBox文本框控件 ,自定义事件 +Button按钮控件

一、知识点概述

在WinForm窗体开发中,控件一共有两种创建方式:

  • 可视化创建:直接在左侧工具箱拖拽Label、Button等控件到窗体上,由系统自动生成代码;

  • 代码动态创建(本节课重点):程序员手动编写C#代码,自己new控件、设置属性、添加到窗体。

  • 本节课案例:不使用拖拽的方式,纯手写代码,动态创建一个Label标签控件,并熟练掌握Label所有最常用属性,掌握所有图片加载方式。

    动态创建任何控件,固定永远遵循三大步骤:实例化对象 ==> 设置属性 ==> 添加到窗体集合。


    二、完整可运行源代码

    namespace _2Label
    {
    public partial class Form1 : Form
    {
    //窗体构造函数:程序启动最先执行
    public Form1()
    {
    //初始化窗体和所有设计器控件
    InitializeComponent();

    //====================第一步:创建Label控件对象====================
    Label l1 = new Label();

    //====================第二步:给控件设置所有属性====================
    //设置标签显示的文本内容
    l1.Text = "good good study";

    //设置标签字体颜色(前景色)
    l1.ForeColor = Color.White;

    //设置标签背景颜色,使用ARGB三原色+透明度模式
    l1.BackColor = Color.FromArgb(255, 0, 0);

    //设置控件尺寸:宽度100像素,高度20像素
    l1.Size = new Size(100, 20);

    //设置文本在Label内部的对齐方式
    l1.TextAlign = ContentAlignment.MiddleCenter;

    //设置控件在窗体上的坐标位置
    l1.Location = new Point(200, 0);

    //给Label设置背景图片(四种写法)
    //1.绝对路径写法(使用转义符\\\\)
    //l1.Image = Image.FromFile("C:\\\\Users\\\\Administrator\\\\Desktop\\\\img\\\\award_type_0.png");

    //2.绝对路径写法(@屏蔽转义符)
    //l1.Image = Image.FromFile(@"C:\\Users\\Administrator\\Desktop\\img\\award_type_0.png");

    //3.相对路径写法(../返回上一级目录)
    //l1.Image = Image.FromFile("../../award_type_0.png");

    //4.资源文件读取(官方推荐、作业/项目首选)
    l1.Image = Properties.Resources.background;

    //====================第三步:把控件添加到窗体====================
    this.Controls.Add(l1);
    }
    }
    }


    三、动态创建控件三大步骤(必考简答题)

    步骤1:创建控件对象

    语法:控件类型 变量名 = new 控件类型();

    作用:在内存中开辟一块空间,创建一个空白的Label控件,此时控件只存在内存中,窗体看不到。

    步骤2:设置控件相关属性

    对创建好的控件进行赋值:设置文字、颜色、大小、坐标、图片、字体等样式。

    步骤3:添加到窗体控件集合

    语法:this.Controls.Add(控件名);

    作用:把控件从内存添加到窗体集合,窗体才会渲染并显示控件。不写这句代码,页面永远看不到控件。


    四、逐行代码超详细解析

    1. InitializeComponent();

    该方法是窗体自带初始化方法。

    功能:加载窗体、初始化所有拖拽创建的控件、读取设计器里面的所有布局属性。

    注意:所有窗体项目必须保留,绝对不能删除。

    2. Label l1 = new Label();

    手动实例化Label标签控件。

    此时 l1 只是内存中的一个对象,不属于窗体,界面无法显示。

    3. l1.Text = "good good study";

    Text属性:用来获取/设置Label标签内部显示的文本内容。

    等同于我们拖拽控件时,右侧属性面板中的Text属性。

    4. l1.ForeColor = Color.White;

    ForeColor(前景色):专门用来设置文字颜色。

    可以直接使用Color类自带的颜色:White、Red、Black、Gray、Blue等。

    5. l1.BackColor = Color.FromArgb(255, 0, 0);

    BackColor(背景色):用来设置整个Label控件的背景颜色。

    Color.FromArgb(A,R,G,B):通过ARGB四通道自定义颜色

    • A:透明度,取值范围0~255,数值越小越透明,255完全不透明

    • R:红色通道 0~255

    • G:绿色通道 0~255

    • B:蓝色通道 0~255

    本代码(255,0,0)代表:完全不透明的纯红色背景。

    6. l1.Size = new Size(100, 20);

    Size属性:设置控件整体大小。

    new Size(宽度,高度),单位:像素px。

    本例:标签宽度100像素,高度20像素。

    7. l1.TextAlign = ContentAlignment.MiddleCenter;

    TextAlign:设置文本在Label内部的对齐方式,属于枚举类型。

    • TopLeft:默认,左上角对齐

    • MiddleCenter:水平居中、垂直居中(最常用)

    • BottomRight:右下角对齐

    8. l1.Location = new Point(200, 0);

    Location属性:设置控件在窗体上的坐标位置。

    坐标规则:

    • 窗体左上角为原点 (0,0)

    • X值:水平向右偏移

    • Y值:垂直向下偏移

    本例:控件距离窗体左边200px,距离顶部0px。

    9. Label加载图片的四种方式(最全详解)

    作用:给Label设置背景图片,使用 Image.FromFile() 加载本地图片

    方式一:绝对路径(转义写法)

    Windows系统路径中 \\ 属于转义符号,所以路径必须写双斜杠 \\\\

    缺点:写死本地路径,换电脑、移动项目图片直接失效。

    方式二:@禁止转义符

    在字符串前面加@,取消所有转义功能,可以直接写单斜杠 \\,简化书写。

    本质仍然是绝对路径,缺点同上。

    方式三:相对路径(推荐初学者)

    程序运行exe默认生成在 bin/Debug 文件夹下;

    ../ 代表返回上一级目录;

    ../../ 代表返回上两级目录。

    方式四:资源文件加载(企业开发/作业首选)

    将图片导入项目:Properties –> Resources.resx

    优点:图片直接嵌入项目内部,不属于外部文件,发布项目、更换电脑图片永不丢失,稳定性最高。

    调用方式:控件.Image = Properties.Resources.图片名;

    10. this.Controls.Add(l1);

    • this:指代当前Form1窗体

    • Controls:当前窗体的控件集合,所有显示在窗体上的控件全部存放在这里

    • Add():添加方法,将我们手动创建的l1添加进集合

    重点:所有手写控件,必须Add,否则界面看不见!


    五、常见易错点(考试/作业高频坑点)

  • 忘记添加Controls.Add():属性全部写对,页面空白,看不到控件;

  • 混淆ForeColor和BackColor:ForeColor改文字、BackColor改背景;

  • 绝对路径硬编码:只能自己电脑能用,换电脑直接报错;

  • ARGB数值越界:四个参数必须在0~255之间;

  • 分不清相对路径:../是上一级,写的层级不对图片加载失败。


  • 六、课堂总结

    1、动态创建控件固定三步:new实例化对象、配置各项属性、Add添加至窗体集合;

    2、Label常用属性包含:Text、ForeColor、BackColor、Size、Location、TextAlign、Image;

    3、颜色赋值分为:系统自带颜色、ARGB自定义颜色两种;

    4、图片加载四种方式:绝对路径、@禁止转义、相对路径、资源文件;

    5、正式开发优先使用资源文件加载图片,安全性最高,不会出现图片丢失问题。

    WinForm TextBox文本框控件 + 自定义事件

    一、知识点概述

    本次课程主要学习两大核心内容:

    1、动态手写创建 TextBox 文本框控件,掌握文本框所有常用属性;

    2、掌握TextBox内置TextChanged内容改变事件;

    3、复习自定义委托、自定义事件、事件绑定、事件触发;

    4、掌握WinForm控件事件的两种使用方式。

    TextBox:文本输入框,主要用于接收用户输入账号、密码、文字、数字等数据,是项目开发中使用频率最高的控件之一。


    二、完整源代码

    namespace _3textbox
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();

    //创建字体对象,设置字体为楷体
    FontFamily family = new FontFamily("楷体");

    //动态创建TextBox文本框控件,并初始化所有属性
    TextBox t1 = new TextBox()
    {
    Text = "你好", //输入框默认显示文本
    Font = new Font(family, 20, FontStyle.Bold), //字体、字号、加粗
    Size = new Size(300, 100), //控件大小(宽,高)
    Location = new Point(100, 300), //控件窗体坐标
    TextAlign = HorizontalAlignment.Center, //文本水平居中
    MaxLength = 10, //限制最大输入字符为10位
    PasswordChar = '&' //设置密码掩码符号
    };

    t1.Clear(); //清空文本框里面所有文字

    //给文本框绑定【内容改变事件】Lambda写法
    t1.TextChanged += (sender, e) =>
    {
    Console.WriteLine("ccccccccccccccc");
    };

    //t1.Focus(); //让文本框直接获取输入焦点

    //把控件添加到窗体,界面才能显示
    this.Controls.Add(t1);

    //给自定义事件绑定Lambda方法
    Change += (a) =>
    {
    Console.WriteLine(a + "ssss");
    MessageBox.Show(a + "sssss");
    };

    //手动触发自定义事件,传递参数10
    Change.Invoke(10);
    }

    //1.自定义委托:规定事件方法格式(参数为int类型)
    public delegate void MyDel(int a);
    //2.根据委托创建自定义事件
    public event MyDel Change;

    //=====设计器拖拽控件自带的TextChanged事件=====
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    Console.WriteLine("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
    Console.WriteLine("aaaaaaaaaaaaaaaaaaaa");
    }

    //让指定文本框获取焦点
    private void label2_Click(object sender, EventArgs e)
    {
    textBox4.Focus();
    }
    }
    }


    三、动态创建TextBox步骤

    动态创建所有控件,固定三步:

    第一步:new 实例化控件对象

    第二步:给控件设置各种属性

    第三步:this.Controls.Add(控件名) 添加到窗体


    四、逐行代码详细解析

    1、FontFamily 字体类

    FontFamily family = new FontFamily("楷体");

    作用:创建字体家族对象,指定当前控件使用的字体类型,例如:宋体、黑体、楷体等。

    2、动态创建TextBox

    TextBox t1 = new TextBox(){};

    在内存中创建一个全新的空白文本框控件,此时窗体看不到控件。

    3、TextBox 全部属性详解

    • Text:设置文本框默认显示的内容,也是用户输入的数据。

    • Font:设置字体样式。参数依次为:字体对象、字号、字体样式(加粗/斜体/常规)。

    • Size:控件大小,new Size(宽度,高度)。

    • Location:控件坐标,new Point(X,Y),以窗体左上角为原点。

    • TextAlign:文本对齐方式,HorizontalAlignment.Center代表水平居中。

    • MaxLength:限制文本框最大输入字符数量,防止用户输入过多内容。

    • PasswordChar:密码掩码,输入的内容全部替换为指定符号,用于密码框。

    4、Clear() 清空方法

    t1.Clear();

    作用:清空文本框内部所有的文字内容,重置输入框。

    5、TextChanged 文本改变事件(重点)

    t1.TextChanged += (sender, e) =>
    {
    Console.WriteLine("ccccccccccccccc");
    };

    触发时机:只要文本框内容发生任何改变,立刻触发。

    绑定方式:使用Lambda表达式快速绑定事件,不需要单独写方法。

    6、Focus() 获取焦点

    Focus():让指定文本框自动激活,光标直接定位到输入框内,方便用户直接输入内容。

    7、添加控件到窗体

    this.Controls.Add(t1);

    所有手写控件必须Add添加到窗体集合,否则界面无法显示控件。


    五、自定义委托与自定义事件解析

    1、自定义委托

    public delegate void MyDel(int a);

    定义一个委托,约束回调方法:无返回值,必须接收一个int类型参数。

    2、自定义事件

    public event MyDel Change;

    以自定义委托为类型,创建事件变量Change。

    3、事件订阅

    Change += (a) =>
    {
    Console.WriteLine(a+"ssss");
    MessageBox.Show(a + "sssss");
    };

    给事件绑定Lambda回调方法,事件触发自动执行。

    4、触发事件

    Change.Invoke(10);

    手动触发事件,并给订阅方法传递参数10;最终控制台打印内容 + 弹出提示框。


    六、WinForm控件事件两种使用方式

    WinForm系统自带控件(TextBox、Label、Button)内部已经封装好了全部事件,不需要我们自己定义事件。

    方式一:界面方式(双击控件)

    直接在窗体设计页面,双击TextBox,自动生成TextChanged事件方法,直接写业务代码。

    方式二:代码绑定方式

    控件.事件 += 方法 / Lambda表达式;适合动态创建的控件。


    七、本节课知识点总结

    • 1、动态创建TextBox控件分为三步:new对象、设置属性、Add添加窗体;

    • 2、常用属性:Text、Font、Size、Location、MaxLength、PasswordChar;

    • 3、Clear()清空文本、Focus()设置输入焦点;

    • 4、TextChanged事件:文本内容一旦修改立马触发;

    • 5、控件事件分两种:界面双击生成、代码+=绑定;

    • 6、自定义事件三步走:定义委托、声明事件、订阅并触发事件。


    八、易错点

    • 1、手写控件忘记Controls.Add(),页面看不见控件;

    • 2、PasswordChar设置之后,所有输入内容都会被隐藏;

    • 3、TextChanged只要内容改变就触发,输入一个字符触发一次;

    • 4、自定义事件只能在本类内部Invoke触发,外部无法触发。

    ——————Button按钮控件————————

    一、知识点概述

    Button(按钮)是WinForm里面最重要、最常用的交互控件。

    按钮主要作用:接收用户鼠标点击,执行对应的功能代码。

    本节课学习内容包含:

    1、按钮常用属性:Text、Location、Enabled

    2、手动动态创建按钮(手写代码,不拖拽)

    3、动态绑定点击事件(Lambda匿名方法)

    4、绑定已有方法、移除事件

    5、事件里面两个参数 sender 和 e 的作用

    6、多个按钮共享同一个点击事件

    7、WinForm事件的两种使用方式


    二、完整可运行源代码

    namespace _4按钮
    {
    public partial class Form1 : Form
    {
    //窗体构造函数:程序运行第一个执行的方法
    public Form1()
    {
    //初始化窗体和所有拖拽控件
    InitializeComponent();

    //设置按钮启用状态,true可用,false禁用变灰色
    button1.Enabled = true;

    //==================第一步:创建按钮对象==================
    Button btn = new Button()
    {
    Text = "OK", //设置按钮显示文字
    Location = new Point(30, 100) //设置按钮坐标X,Y
    };

    //==================第二步:绑定点击事件(Lambda)==================
    //Click:鼠标单击事件
    btn.Click += (sender, e) =>
    {
    //弹出消息提示框
    MessageBox.Show("我点击btn");
    };

    //==================第三步:绑定已存在的事件方法==================
    //同一个事件可以绑定多个函数,点击全部执行
    btn.Click += button1_Click;

    //==================移除事件(减法)==================
    //btn.Click -= button1_Click;

    //==================第四步:把控件添加到窗体==================
    this.Controls.Add(btn);
    }

    /// <summary>
    /// 按钮共用的点击事件方法
    /// </summary>
    /// <param name="sender">触发事件的控件对象</param>
    /// <param name="e">事件参数</param>
    private void button1_Click(object sender, EventArgs e)
    {
    //sender默认是object类型,需要强制转换成Button类型
    Button tempBtn = (Button)sender;

    //将被点击按钮的文字赋值给label
    label1.Text = tempBtn.Text;
    }
    }
    }


    三、动态创建控件固定四大步骤(必考简答题)

    不管是Label、TextBox、Button,所有控件动态创建全部固定4步:

    第一步:new 实例化控件对象(在内存创建控件)

    第二步:给控件设置相关属性(文字、大小、坐标)

    第三步:根据需求绑定对应的事件(点击、输入、加载)

    第四步:this.Controls.Add(控件名) 添加到窗体显示

    注意:少第四步,控件永远看不见!


    四、逐行代码超详细解析

    1、InitializeComponent();

    作用:初始化窗体,加载设计器里面所有拖拽的控件,读取界面布局。

    注意:所有窗体项目必须保留,绝对不能删除。

    2、Enabled 属性

    button1.Enabled = true;

    Enabled 用来控制按钮是否能被点击。

    true:按钮正常状态,可以点击(默认)

    false:按钮变成灰色,禁用状态,无法点击、无法触发事件

    3、动态创建按钮对象

    Button btn = new Button()
    {
    Text = "OK",
    Location = new Point(30, 100)
    };

    Button btn = new Button():在内存中创建一个全新空白按钮。

    Text:设置按钮表面显示的文字内容。

    Location:设置按钮在窗体的坐标。

    坐标规则:窗体左上角为原点(0,0),X向右增加,Y向下增加。

    4、Click 点击事件

    Click是按钮最核心事件:鼠标左键单击按钮的一瞬间触发。

    事件绑定符号:

    += :给控件绑定事件(加法)

    -= :移除已经绑定的事件(减法)

    同一个按钮可以绑定多个事件方法,点击时从上到下全部执行。

    5、Lambda匿名事件

    btn.Click += (sender, e) =>
    {
    MessageBox.Show("我点击btn");
    };

    Lambda作用:快速绑定简单事件,不用单独写一个方法。

    MessageBox.Show("内容"):弹出弹窗提示用户。

    6、绑定外部已有方法

    btn.Click += button1_Click;

    把我们写好的 button1_Click 方法绑定给按钮。

    好处:多个按钮可以共用同一个点击方法,减少冗余代码。

    7、移除事件

    //btn.Click -= button1_Click;

    使用 -= 可以解除按钮和方法之间的绑定,解除之后点击按钮不再执行该方法。

    8、添加控件到窗体

    this.Controls.Add(btn);

    his:代表当前Form1窗体。

    Controls:窗体的控件集合,所有能看见的控件全部存放在集合里面。

    Add:把控件添加进集合,添加之后界面才能显示按钮。


    五、事件参数详解(考试必考重点)

    private void button1_Click(object sender, EventArgs e)
    {
    label1.Text = ((Button)sender).Text;
    }

    1、sender 参数

    含义:到底是谁触发了这个点击事件,指向被点击的控件。

    类型:object(所有类的父类),无法直接使用控件属性。

    所以必须强制类型转换:(Button)sender

    作用:实现多按钮共享同一个事件方法,简化代码。

    2、e 参数

    EventArgs:事件参数,用来存储事件附带的数据。

    普通单击事件没有额外数据,一般不需要使用;

    如果是鼠标移动、键盘按下事件,e里面会包含坐标、按键信息。


    六、WinForm事件的两种写法

    方式一:设计器方式(拖拽控件专用)

    直接双击按钮,系统自动生成Click事件方法,直接写代码即可。

    方式二:代码绑定方式(动态控件专用)

    语法:控件.事件 += 方法 / Lambda

    适合所有手写动态创建的控件,灵活度更高。


    七、知识点总结

    • 1、动态创建按钮四步:new对象、设置属性、绑定事件、Add添加;

    • 2、Text修改按钮文字,Location修改按钮坐标;

    • 3、Enabled控制按钮是否禁用,false变灰无法点击;

    • 4、Click为单击事件,+=绑定事件,-=移除事件;

    • 5、sender代表触发事件的控件,必须强制转换类型;

    • 6、多个按钮可以共用同一个事件方法,提高代码复用性。


    八、常见易错点

    • 1、动态创建控件忘记Controls.Add(),页面空白看不到控件;

    • 2、直接使用sender.Text报错,没有做强制类型转换;

    • 3、分不清 += 和 -=,加法绑定、减法移除;

    • 4、按钮被Enabled=false禁用后,任何事件都不会触发;

    • 5、同一个事件可以绑定多个方法,执行顺序从上往下。

    赞(0)
    未经允许不得转载:171主机测评 » C#WinForm Label控件+TextBox文本框控件 ,自定义事件 +Button按钮控件
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址