C#工具箱中添加自定义控件

目录

1,创建类库添加自定义控件。

1.1,引用程序集

1.2,添加自定义控件类。

1.3,变更默认的自定义控件图标。

1.3.1,控件图标要求。

 1.3.2,添加控件图标文件。

 1.3.3,自定义类附加特性变更图标。

1.3.4,效果呈现。

1.4,注意事项。

2,属性窗口添加自定义属性。

2.1,使用特性将自定义属性添加到属性窗口并进行注解,分类。

2.2,使用OnResize()方法在拉伸控件时合理布局。

3,添加自定义控件。

4,使用自定义控件。

5,屏幕录制软件。


1,创建类库添加自定义控件。

1.1,引用程序集

 System.Drawing程序集,System.Windows.Froms程序集。

1.2,添加自定义控件类。

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

namespace WinFormCustomControlLibrary
{
    [ToolboxBitmap(typeof(SuperTextBox), "tubiao.ico")]
    public class SuperTextBox : TextBox
    {
        public SuperTextBox()
        {

        }
        //创建一个错误提示Errorprovider
        ErrorProvider provider = new ErrorProvider();
        /// <summary>
        /// 对输入内容进行正则表达式验证
        /// </summary>
        /// <param name="regularExpression">正则表达式</param>
        /// <param name="errorInfo">提示的错误信息</param>
        /// <returns></returns>
        public bool ValidationRule(string regularExpression, string errorInfo)
        {
            if (!System.Text.RegularExpressions.Regex.IsMatch(this.Text, regularExpression))
            {
                provider.SetError(this, errorInfo);
                return false;
            }

            provider.SetError(this, null);
            return true;
        }
    }
}

1.3,变更默认的自定义控件图标。

1.3.1,控件图标要求。
大小:控件的图标必须是 16x16 位图图像。
文件类型:图标可以是位图 (.bmp) 或 Windows 图标 (.ico) 文件。
透明度:洋红色(RGB:255,0,255,Hex:0xFF00FF)呈现透明。
主题:Visual Studio 有多个主题,但每个主题要么是深色,要么是浅色。 图标应设计为浅色主题。 当 Visual Studio 使用深色主题时,图标中的深色和浅色将自动反转。
 1.3.2,添加控件图标文件。

        将图标图片复制到程序根目录下,在解决方案管理器中在项目名称右键选择“添加”—>“添加现有项”,将图标图片加入到项目中,对图片资源的属性进行修改,将“生成操作”一栏该为“嵌入的资源”。

 1.3.3,自定义类附加特性变更图标。

        注意该特性位于System.Drawing程序集中。

 [ToolboxBitmap(typeof(SuperButton), "Resources.tu.ico")]
  public  class SuperButton:Button
    {
        //必须有一个无参构造函数
        public SuperButton()
        {
            
        }

    }

        此例中的图标位置  "Resources.tu.ico"  表示:根目录下的Resources文件夹下的tu.ico图片。这里需要特别注意:

        Resources是位于根目录下的文件夹而不是常见的位于执行文件目录下的文件夹

        图标路径文件夹层级之间用  .  而不是 /

1.3.4,效果呈现。
默认图标自定义图标

1.4,注意事项。

1.4.1,自定义控件类包含无参构造函数。
1.4.2,自定义组件类访问级别是Public。
1.4.3,实现了IComponent接口。

2,属性窗口添加自定义属性。

    [System.Drawing.ToolboxBitmap(typeof(SuperProgressBar), "Resources.progressBar.ico")]
    public partial class SuperProgressBar : UserControl
    {
        public SuperProgressBar()
        {
            InitializeComponent();
            CurrentValue = 20;
        }
        double currentValue = 0;
        [Browsable(true), Category("自定义属性"),Description("当前进度值")]
        /// <summary>
        /// 当前值
        /// </summary>
        public double CurrentValue
        {
            get
            {
                return currentValue;
            }
            set
            {
                if (value > 100)
                {
                    currentValue = 100;
                }
                else if(value<0)
                {
                    currentValue = 0;
                }
                else
                {
                    currentValue = value;
                }
                lblBlank.Size =new Size(lblBack.Size.Width,  Convert.ToInt32( (100 - currentValue) / 100.0 * lblBack.Height));
                lblValue.Text = $"{currentValue}%";
            }
        }
        [Browsable(true),Category("自定义属性"),Description("填充进度条颜色")]
        /// <summary>
        /// 填充颜色
        /// </summary>
        public Color Color
        {
            get
            {
                return lblBack.BackColor;
            }
            set
            {
                lblBack.BackColor = value;
            }
        }
        //调整控件大小时自动调用
        protected override void OnResize(EventArgs e)
        {
            lblBlank.Height = Convert.ToInt32((100 - currentValue) / 100.0 * lblBack.Height);
            //杜绝调整时偶尔出现宽度变化不一致。
            lblBlank.Width = lblBack.Width;
            base.OnResize(e);
        }
    }

2.1,使用特性将自定义属性添加到属性窗口并进行注解,分类。

double currentValue = 0;
        [Browsable(true), Category("自定义属性"),Description("当前进度值")]
        /// <summary>
        /// 当前值
        /// </summary>
        public double CurrentValue
        {
            get
            {
                return currentValue;
            }
            set
            {
                if (value > 100)
                {
                    currentValue = 100;
                }
                else if(value<0)
                {
                    currentValue = 0;
                }
                else
                {
                    currentValue = value;
                }
                lblBlank.Size =new Size(lblBack.Size.Width,  Convert.ToInt32( (100 - currentValue) / 100.0 * lblBack.Height));
                lblValue.Text = $"{currentValue}%";
            }
        }

效果:

2.2,使用OnResize()方法在拉伸控件时合理布局。

//调整控件大小时自动调用
        protected override void OnResize(EventArgs e)
        {
            lblBlank.Height = Convert.ToInt32((100 - currentValue) / 100.0 * lblBack.Height);
            //杜绝调整时偶尔出现宽度变化不一致。
            lblBlank.Width = lblBack.Width;
            base.OnResize(e);
        }

3,添加自定义控件。

        如果二次开发控件的类库与开发程序位于同一解决方案中,该开发程序的工具箱自动添加二次开发的控件。

        如果是第三方提供的.dll,则在工具箱内单击右键: 选择项 ->.Net Framework组件->浏览->选择需要加载的.dll。

注意:加载的dll文件所放置的路径不能包含中文字符,如果包含则加载该dll时将弹出 “没有可放置在工具箱的组件”的对话框,如下所示:

        如果实在不能避免可直接手动将.dll拖拽到工具箱,那时将自动将该.dll包含的组件添加到工具箱。

4,使用自定义控件。

5,屏幕录制软件。

        自己动手丰衣足食,哈哈,自己编写的一款录制屏幕任意区域的软件,并将录制的结果转为gif文件,方便效果展示。

https://download.csdn.net/download/lingxiao16888/89423704

C# ,可以使用 PictureBox 控件或者自定义控件来显示图片,以下是两种方法的示例: 1. 使用 PictureBox 控件 PictureBox 控件是 Windows 窗体应用程序用于显示图片的常用控件。你可以通过以下步骤在窗体添加一个 PictureBox 控件: - 打开 Visual Studio,创建一个新的 Windows 窗体应用程序项目。 - 在“工具箱找到 PictureBox 控件,拖动它到窗体上。 - 右键单击 PictureBox 控件,在“属性”窗口设置其 Image 属性为要显示的图片。 下面是一个简单的示例代码: ```csharp using System; using System.Windows.Forms; namespace PictureBoxExample { public partial class Form1 : Form { public Form1() { InitializeComponent(); // 设置 PictureBox 的 Image 属性为要显示的图片 pictureBox1.Image = Image.FromFile("path/to/image.jpg"); } } } ``` 2. 使用自定义控件 如果你需要更多的图片显示特性,可以考虑使用自定义控件。以下是一个简单的示例代码: ```csharp using System; using System.Drawing; using System.Windows.Forms; namespace CustomControlExample { public class ImageControl : Control { private Image image; public Image Image { get { return image; } set { image = value; Invalidate(); } } protected override void OnPaint(PaintEventArgs e) { // 在控件上绘制图片 if (image != null) { e.Graphics.DrawImage(image, 0, 0); } } } public partial class Form1 : Form { public Form1() { InitializeComponent(); // 创建自定义控件并设置其 Image 属性为要显示的图片 var imageControl = new ImageControl(); imageControl.Image = Image.FromFile("path/to/image.jpg"); // 将自定义控件添加到窗体 Controls.Add(imageControl); } } } ``` 在上面的代码,我们创建了一个名为 ImageControl 的自定义控件,并在其添加了一个 Image 属性来设置要显示的图片。在 OnPaint 方法,我们通过 Graphics.DrawImage 方法来绘制图片。 在窗体的构造函数,我们创建了一个 ImageControl 实例并设置其 Image 属性为要显示的图片,然后将该控件添加到窗体。 注意,自定义控件的绘制逻辑可能比 PictureBox 控件复杂,需要处理一些更多的特性,比如图片的缩放、移动等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值