C#自定义控件的创建
时间:2022-07-23
本文章向大家介绍C#自定义控件的创建,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在编程过程中,现有的c#控件远远不能满足我们的需要,这时候就需要我们自己来开发控件了。本人在开发自定义控件时走了一些弯路,写下此篇,希望能够给有需要的朋友一些帮助,也借此加深自己的印象。
1.创建自定义控件
2.添加控件,组合成一个新的控件
自定义控件功能:打开一张图片,将图片展示在pictureBox控件中,并将图片的名称、大小、尺寸显示出来
控件如下:
pictureBox1:命名为picBox
label1~label6 :左边三个显示文字,右边三个命名为:lblName lblLength lblSize
button1:命名为btnOpen
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsControlLibrary1
{
public partial class UserControl1: UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofdPic = new OpenFileDialog();
ofdPic.Filter = "JPG(*.JPG;*.JPEG);gif文件(*.GIF);PNG(*.PNG)|*.jpg;*.jpeg;*.gif;*.png";
ofdPic.FilterIndex = 1;
ofdPic.RestoreDirectory = true;
ofdPic.FileName = "";
if (ofdPic.ShowDialog() == DialogResult.OK)
{
string sPicPaht = ofdPic.FileName.ToString();
FileInfo fiPicInfo = new FileInfo(sPicPaht);
long lPicLong = fiPicInfo.Length / 1024;
string sPicName = fiPicInfo.Name;
string sPicDirectory = fiPicInfo.Directory.ToString();
string sPicDirectoryPath = fiPicInfo.DirectoryName;
Bitmap bmPic = new Bitmap(sPicPaht);
if (lPicLong > 400)
{
MessageBox.Show("此文件大小為" + lPicLong + "K;已超過最大限制的K范圍!");
}
else
{
Point ptLoction = new Point(bmPic.Size);
if (ptLoction.X > picBox.Size.Width || ptLoction.Y > picBox.Size.Height)
{
picBox.SizeMode = PictureBoxSizeMode.Zoom;
}
else
{
picBox.SizeMode = PictureBoxSizeMode.CenterImage;
}
}
picBox.LoadAsync(sPicPaht);
lblName.Text = sPicName;
lblLength.Text = lPicLong.ToString() + " KB";
lblSize.Text = bmPic.Size.Width.ToString() + "×" + bmPic.Size.Height.ToString();
}
}
}
}
点击【解决方案】,右键弹出窗口,点击【生成解决方案】
至此,自定义控件的创建已经完成!
生成的控件路径在Debug文件夹下,dll文件
3.自定义控件测试
新建windows窗体应用程序
发现在左边的控件工具栏中并没有刚刚的自定义控件,不要急!!
选择工具下的【选择工具箱项】
浏览,选择dll文件路径,注意路径中不能包含中文字符,切记!否则会出错!
添加成功后,会发现工具箱中出现了刚刚定义的控件。
测试结果:
- 附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的 ”
- 7.python常用模块
- 8.python面向对象编程
- 莫比乌斯反演0
- 9.python异常处理
- Numpy 修炼之道 (9)—— 广播机制
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- 11.python线程
- Numpy 修炼之道 (8)—— 常用函数
- Numpy 修炼之道 (7)—— 形状操作
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
- 12.python进程协程异步IO
- POJ3622 Gourmet Grazers(FHQ Treap)
- 洛谷P3201 [HNOI2009]梦幻布丁
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java面试总结】多线程
- RL实践1——动态规划值迭代
- RL实践3——为Agent添加Policy
- CentOS 快速安装Python3和pip3
- Linux使用 常见经验和技巧总结
- SwiftUI:辅助功能——简单介绍
- Xshell突出显示集
- samba服务安装脚本
- 【Vue.js】Vue.js组件库Element中的树形控件、分页、标记、头像和警告
- 磁盘分区空间检测工具
- 【Vue.js】Vue.js组件库Element中的加载、消息提示、弹框和通知
- 云主机装ikuai
- 【Vue.js】Vue.js组件库Element中的导航菜单、标签页、面包屑和页头
- CentOS7查看硬盘是SSD还是HDD
- 浅谈CentOS防火墙命令