C#自定义控件

2023-05-16

一、    开发环境和工具
1、    WIN10系统
2、    Visual Studio社区版 2019(C#)

二、    创建自定义控件窗体
①    添加一个自定义控件,右键解决方案,点击添加,然后点击用户控件

②    选择用户控件(Windows窗体)

 
③    得到如下图所示控件

 


④    从左侧工具箱拖曳控件并布局,如下图所示

 
⑤    查看工具箱就能够看见我们的自定义控件已经在工具箱生成了 
 

三、    添加相应函数

①    设置名称
 

public void SetName(string Name)
{
       this.lab_Name.Text = Name;
       return;
}


②    更新测试时间
 

     public void UpdateTimer(int Sec)
     {
         string StrHour;
         string StrMin;
         string StrSec;

         if ((Sec / 3600) < 10) 
             StrHour = "0" + (Sec / 3600).ToString(); 
         else 
             StrHour=(Sec / 3600).ToString();

         if (((Sec % 3600) / 60) < 10) 
             StrMin = "0" + ((Sec % 3600) / 60).ToString(); 
         else 
             StrMin= ((Sec % 3600) / 60).ToString();
             
         if (((Sec % 3600) % 60) < 10) 
            StrSec = "0" + ((Sec % 3600) % 60).ToString();
         else
            StrSec= ((Sec % 3600) % 60).ToString();
         this.textBox_TestTimer.Text = StrHour + ":" + StrMin + ":" + StrSec;
         return;
     }


③    更新测试状态

   public void UpdateTestState(bool LedRed,bool LedGreen, bool LedYellow)
    {
         if (!LedRed) 
            this.lab_LedRed.BackColor = System.Drawing.Color.Firebrick;
         else 
            this.lab_LedRed.BackColor = System.Drawing.Color.Red;

         if (!LedGreen)
            this.lab_LedGreen.BackColor = System.Drawing.Color.ForestGreen; 
         else
            this.lab_LedGreen.BackColor = System.Drawing.Color.Lime;

        if (!LedYellow) 
            this.lab_LedYellow.BackColor = System.Drawing.Color.ForestGreen; 
        else 
            this.lab_LedYellow.BackColor = System.Drawing.Color.Yellow;

        return;
    }

④设置ID

public void SetID(int IDIndex)
{
      if(IDIndex<10)
           this.lab_IDValue.Text ="00" + IDIndex.ToString();
       else if(IDIndex < 100)  
           this.lab_IDValue.Text = "0" + IDIndex.ToString();
       else if (IDIndex < 1000) 
           this.lab_IDValue.Text = IDIndex.ToString();

       return;
 }

四、    控件应用

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int Sec = 0;
        UserControl2[] userControl1 = new UserControl2[1024]; //创建控件数组
        private Layout layout = new Layout();
       
        /// <summary>
        /// 更新测试时间
        /// </summary>
        /// <param name="count"></param>
        /// <param name="Sec"></param>
        private void UpdataTimer(int count,int Sec)
        {
            for (int i = 0; i < count; i++)
            {
                 userControl1[i].UpdateTimer(Sec) ;
            }
        }
        /// <summary>
        /// 添加控件,count为添加控件数量
        /// </summary>
        /// <param name="count"></param>
        private void AddControl(int count)
        {
            int PanelWidth;
            int PanelHeight;
            int ColCount = 0;

           
            this.panel1.Controls.Clear();//清除面板控件
            PanelWidth = this.panel1.Width;
            PanelHeight = this.panel1.Height;
            layout.RowGap = Convert.ToInt32(textBox_RowGap.Text);    
            layout.ColGap = Convert.ToInt32(textBox_ColGap.Text);
            layout.LeftGap = Convert.ToInt32(textBox_LeftGap.Text);
            layout.TopGap = Convert.ToInt32(textBox_TopGap.Text);

            layout.Height = 134;
            layout.Width =218;
            //根据面板宽度,计算多少列
            ColCount = (PanelWidth - layout.LeftGap - layout.RightGap) / (layout.Width + layout.ColGap);

            for (int i = 0; i < count; i++)
            { 
                userControl1[i] = new UserControl2(); //实例化控件
                 //根据列距,行距,计算控件位置
                 userControl1[i].Location = new System.Drawing.Point((i % ColCount) * (layout.Width + layout.ColGap) +layout.LeftGap,(i / ColCount) * (layout.Height + layout.RowGap) + layout.TopGap);
                //更新测试状态
                userControl1[i].UpdateTestState(true, true,true);
               //设置名称
                userControl1[i].SetName("名称" + (i + 1).ToString());
                //设置ID
                userControl1[i].SetID(i + 1);
                //设置控件宽度和高度
                userControl1[i].Width = layout.Width;
                userControl1[i].Height = layout.Height;
                //添加相应控件
                this.panel1.Controls.Add(userControl1[i]); 
            }
            this.timer1.Start();

        }

        private void button1_Click_2(object sender, EventArgs e)
        {
            AddControl(32);
        }
       
        private void timer1_Tick(object sender, EventArgs e)
        {
            Sec++;
            UpdataTimer(32, Sec); //更新测试时间
        }
    }
} 

五、效果演示

C#自定义控件-CSDN直播C#自定义控件https://live.csdn.net/v/247427

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#自定义控件 的相关文章

  • ASP.NET 自定义控件 自定义属性的使用

    最近在给公司一个老的ASP平台进行改版 xff0c 由于这个平台运行时间太长 xff0c 期间有很多程序员进行过修改 xff0c 导致数据库显得很乱 在实际改版时架构采用了多层架构 xff0c 引入工厂模式 xff0c 面向接口 对于资讯类
  • 自定义控件-UIControl

    UIControl是控件的基类 xff0c 例如 xff1a 按钮 xff0c 滑块等将用户的目的传递到应用程序中 UIContol不能直接的实例化 xff0c 它只能通过继承的方式为子类提供公共的接口和动作结构 UIControl的主要角
  • C#自定义控件

    一 开发环境和工具 1 WIN10系统 2 Visual Studio社区版 2019 xff08 C xff09 二 创建自定义控件窗体 添加一个自定义控件 xff0c 右键解决方案 xff0c 点击添加 xff0c 然后点击用户控件 选
  • 自定义控件sizechange问题

    自定义一个控件的时候 xff0c 放在容器里面 xff0c 显示后 xff0c 容器大小怎么改变没有异常 xff0c 但是如果把一个自定义控件放到另一个自定义控件的时候 xff0c 就有这样的问题 xff0c 就是自定义控件2成为了自定义控
  • ASP.NET 自定义控件 自定义属性的使用

    最近在给公司一个老的ASP平台进行改版 xff0c 由于这个平台运行时间太长 xff0c 期间有很多程序员进行过修改 xff0c 导致数据库显得很乱 在实际改版时架构采用了多层架构 xff0c 引入工厂模式 xff0c 面向接口 对于资讯类
  • android 学习中遇到的知识点(杂)

    1 用xml 合成图片 ic launcher xml 作用 将两个图片组合成一个图片 一个背景图 一个icon
  • WaterView 自定义圆形水波进度

    这几天不是很忙 完成了工作 利用闲暇的时间来完成一下以前不会玩的自定义动画 自定义圆形水波进度 这个以前把我难死了 死活不会 都怪自己太菜了 那么现在来看看到底难不难 真正最简单的实现方法 先来了解下path类的基本方法 移动起点 move
  • C#贝塞尔曲线的应用-未读红点拖拽粘连效果

    前言 提示 仿照手机qq未读红点拖拽粘连效果 贝塞尔曲线的应用非常广泛 本篇文章将使用Winform贝塞尔曲线来实现QQ未读红点拖拽粘连的效果 手机QQ粘连效果 最终实现的效果 分析效果 1 可以看出随着拖拽的距离变大 固定点的圆会逐渐变小
  • TextView自动适配文本大小的几种方案

    标题太难取了 其实本文主要就是讲如何控制文本大小 让其自动适配宽度 其次我们还需要精准控制Text的高度和宽度间距等属性 一般我们的布局都是分 match parent 和 wrap content 而他们的自动方式又有所不同 下面看看都有
  • Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题

    使用ImageView会遇到的问题 在Android应用中 都少不了图片的显示 ImageView 轮播图 ViewPager等等 很多都是来显示图片的 比如一个广告条的轮播效果 参看博客 广告条效果实现 ViewPager加载大图片 Lr
  • QT自定义Tab标签页,可以删除、添加、修改和选中

    先看效果 部分源码 pragma once include
  • Android studio中Custom View使用方法

    Android studio的好处 这里就不错过多的说明了 studio中内置了很多的模版可供使用 大大的简化了工作量 在实际开发中 android自带的各类控件可能无法满足我们的需求 这就需要我们自定义控件 下面介绍一下Custom Vi
  • WPF 使用自定义控件(custom control),资源字典(ResourceDictionary),用户控件(user control),及之间的对比

    最近使用WPF比较多 过来记录一下 对比一下 个人理解usercontrol比较适用于组合控件 比如你想要实现的控件是由多个控件组成的 customCcontrol主要是用来单独重绘控件 如button datagrid lable等 cu
  • android 使用BitmapShader实现圆形以及放大镜效果

    在一些显示用户头像的时候 大多数都是显示圆形的 而不是显示一个正方形或者长方形 这样显得很呆板 视觉效果也不好看 今天就用二种方式实现图片圆形显示的效果 在先讲这个效果实现之前 讲下BitmapShader到底能干嘛 android有几个关
  • 关于app退出的问题,完美退出方式

    实际开发中会有很多关于app的退出问题 我个人比较常见的有两种 一 双击退出 比如说我们在首页的时候需要一个双击退出的方法 点击第一次手机的返回键时提示 再点一次退出应用 之类的话语 我们可以这样做 对重写onKeyDown方法 当他第一次
  • C# 自定义Label实现 指定字符串(关键词)高亮显示(字体、颜色)

    C 自定义Label实现 指定字符串 关键词 高亮显示 字体 颜色 原来是搞android的 本来自己就菜 现在由于项目需要开始着手弄C WPF 虽然了解一些 毕竟只是皮毛 唉 苦不堪言啊 还是得倚靠万能的互联网啊 需求 提示用户的文字 但
  • 自定义控件中 wrap_content 属性无效的分析解决

    问题 在自定义一个类似锁屏页面时间日期样式的控件 继承 View 的时候 发现在 xml 中使用 wrap content 属性相当于使用了 match parent 属性 原因分析 进入View的源码 可以看到 onMeasure 的方法
  • Android实现裁剪

    Android自定义View实现图片缩放旋转移动裁剪 灰信网 软件开发博客聚合 freesion com SuppressLint AppCompatCustomView public class CorpToView extends Im
  • C#System.ArgumentException

    C 自定义控件GDI绘制在主程序报错System ArgumentException 我的绘制图片内容大概如下 private Bitmap backGroundImage null private Bitmap prospectImage
  • Qt自定义图片按钮并设置方向

    Qt自定义图片按钮 设置方向 虽然Qt定义了很多很多控件 但是还是不能满足用户的需要 比如如果想使用ToolButton 需要带文字 又需要文字可以设定位置 显然就不行了 下面的代码就是一个简单的实现ToolButton功能 并且能够设置图

随机推荐