首页 > 其他分享 >Winform自定义控件之复合控件

Winform自定义控件之复合控件

时间:2023-07-16 11:34:19浏览次数:28  
标签:控件 name uc1 UserControl1 new Winform 自定义

winform提供了很多控件供使用,如label;text;button;panel;checkbox等,在一些场景下,这些控件不能很好的满足使用或适应场景,就需要我们进行自定义控件。

自定义控件有三种形式:

1.组合控件:将vs提供的控件自定义组合打包成一个新的控件就叫做组合控件。可避免一些重复工作代码,这个很好理解不赘述。继承自userControl;

2.扩展控件:例如你需要Button基础上能够支持圆角,这就需要对已有的Button控件进行扩展。继承自Button(或其他需要扩展的控件)

3.自定义控件:完全地自己绘制的控件,继承自Control;

记录最简单也最常用的组合控件:

首先右击项目->添加->用户控件;或者 右击项目->添加->类->选择用户控件。点击确定。
将自己需要的控件比如按钮,label等拖入复合控件,如下图。

 然后为组合控件添加事件逻辑:

public partial class UserControl1 : UserControl
{
    private string name = "";//定义名称
    public UserControl1(string name)
    {
        InitializeComponent();
        label1.Text = name;
        this.name = name;
    }
    public event Action<string> btnClick;//添加button Click Event
    private void button1_Click(object sender, EventArgs e)
    {
label1.Text = "click " + DateTime.Now.Second; btnClick(name);//调用button点击Event } }

逻辑完成后,生成解决方案,此时可以在工具箱中看到UserControl1,像使用其他控件一样,直接拖动使用即可。

 下面验证下刚才创建的组合控件UserControl1:

public Form1()
{
    InitializeComponent();
    InitControl();//Form的构造函数
}
private void InitControl()
{
    UserControl1 uc1 = new UserControl1("ucNo.1");
    UserControl1 uc2 = new UserControl1("ucNo.2");
    UserControl1 uc3 = new UserControl1("ucNo.3");//创建3个UserControl1实例。

    this.panel1.Controls.Add(uc1);
    this.panel1.Controls.Add(uc2);
    this.panel1.Controls.Add(uc3);//添加到Panel中

    uc1.Location = new Point(0, 0);
    uc2.Location = new Point(uc1.Size.Width + 10, 0);
    uc3.Location = new Point(uc1.Size.Width * 2 + 20, 0);//设定位置坐标

    uc1.BackColor = Color.Orange;
    uc2.BackColor = Color.Orchid;
    uc3.BackColor = Color.PaleGreen;//设定背景颜色

    uc1.btnClick += ucBtnClick;
    uc2.btnClick += ucBtnClick;
    uc3.btnClick += ucBtnClick;//绑定UserControl1的按钮的点击事件
}
private void ucBtnClick(string name)
{
    label1.Text = name + " Click at " + DateTime.Now.ToString("HHmmss");//点击按钮时在Label中显示名称和时间
}

下面运行看下效果:

 在日常工作中,当需要UI界面显示多个同类型对象的状态时,可以使用组合控件有效避免重复代码,符合面向对象的封装的特性。

 

 

标签:控件,name,uc1,UserControl1,new,Winform,自定义
From: https://www.cnblogs.com/cfsl/p/17484102.html

相关文章

  • 特殊类型注入-自定义的类
    尚硅谷Spring-22准备:构造如下两个类publicclassDept{privateStringdName;privateList<Emp>emps;publicvoidsetdName(StringdName){this.dName=dName;}publicvoidsetEmps(List<Emp>emps){this.emps=emp......
  • WPF 实现 Message 消息提醒控件
    WPF实现Message消息提醒控件控件:Message作者:WPFDevelopersOrg-驚鏵原文链接:https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用.NET4至.NET6;VisualStudio2022;接着上一篇1)新增MessageListBoxItem.cs代码如下:新增了名为MessageTy......
  • 自定义类型的相等判断
    实现自定义类型的相等性判断(参考链接),步骤如下:重写Object.Equals(object)方法,调用IEquatable.Equals(T)进行实现;实现IEquatable接口,在Equals(T)方法中进行自定义的相等性判断。实现时应先进行运行时类型判断,运行时类型相同才相同,然后判断关键字段是否相等;重载==与!=运算符,非必......
  • 自定义图标偏移问题
    在地图开发中使用自定义图标(icon)在地图上表达专题信息十分常见leaflet中常使用L.marker添加图标L.icon,非常方便给定坐标将图标固定在地图中的某个位置,由于图标是有具体大小,并且大小固定不变,在缩放过程中有明显感觉随着地图比例尺缩小,图标会有一定的偏移这篇文章主要介绍使用L......
  • vue 实现自定义主题切换+日夜切换
    此处只参考修改主题色,日夜模式参考elep官网functiongradientColor(this:any,startColor:any,endColor:any,step:any){letstartRGB=gradientColor.prototype.colorRgb(startColor);//转换为rgb数组模式letstartR=startRGB[0];letstartG=star......
  • java8 自定义函数编程
    Java8自定义函数编程在传统的Java编程中,我们通常使用面向对象的方式来组织代码。然而,在某些场景下,面向对象的方式并不是最合适的选择。Java8引入了函数式编程的概念,提供了一些新的特性,例如Lambda表达式和函数接口,使得我们可以更方便地进行函数式编程。Lambda表达式Lambda表达......
  • java设置excel自定义列宽
    Java设置Excel自定义列宽在Java中,我们经常需要操作Excel文件。Excel文件的列宽度对于数据的展示非常重要。默认情况下,Excel中的列宽度是根据内容自动调整的,但有时我们需要手动设置列宽度来确保数据的可读性和美观性。本文将介绍如何使用Java程序来设置Excel文件的自定义列宽。使......
  • 界面控件DevExtreme v23.1新版亮点 - 全新的DateRangeBox组件
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • 前端uni-app自定义精美全端复制文本插件,支持全端文本复制插件 可设置复制按钮颜色
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......
  • access 在其他窗口中设置组合框控件,没有触发它的AfterUpdate事件怎么办?
    '在A窗体中设置B窗体中组合框的值PrivateSubCommand9_Click()OpenFormAneCloseMe("订单管理")'注意这里是先打开窗体,等窗体打开后再设置值Forms("订单管理").Controls("Combo53").Value="全部"Forms("订单管理").Combo53_AfterUp......