CConUI-WinForm
介绍
CConUI-WinForm 是一款精心打造的 WinForm 控件库,
它依托于.Net Framework 4.0 进行开发。
其整体界面风格紧跟当下扁平化设计潮流,简约而不失大气,无论是视觉呈现还是交互体验,都致力于为用户带来最直观的感受。
在技术实现层面,CConUI-WinForm 凭借精湛的编码技艺,所有控件均通过纯代码精心雕琢而成,未引入任何第三方插件与类库,
这不仅确保了控件库体积小巧轻盈,不占用过多系统资源,还使得其指令体系与 WinForm 原生控件高度相近,
对于熟悉 WinForm 开发的人员而言几乎零学习成本,上手即用。
更为突出的是,它能用最精简的代码实现高效运行,将卓越性能与便捷开发完美融合。
开发者只需轻松将其 DLL 文件导入项目,便可无缝开启高效的界面开发之旅,快速搭建出功能强大、美观实用的 WinForm 应用程序。
控件
列表
顶部选择夹
已实现控件 | |
| 横向滚动条 | VScrollBar |
| 纵向滚动条 | HScrollBar |
| ARGB颜色对话框 | ArgbColorDialog |
| 右键菜单 | ContextMenu |
| 文本框(含部分代码框功能) | TextBox |
| 图片框 | PictureBox |
| 蚂蚁线 | AntLine |
| 进度条A(长条形进度条) | ProgressBarA |
| 进度条B(圆形顺时针半扇形进度) | ProgressBarB |
| 进度条C(圆形,由底向上,水平提升进度) | ProgressBarC |
| 进度条D(圆形,由底向上,水平提升改为动态贝塞尔曲线) | ProgressBarD |
| 进度条E(由多个扇形块组成的进度控件) | ProgressBarE |
| 进度条F(圆环扇区进度条) | ProgressBarF |
| 切换按钮 | SwitchButton |
| 单选按钮 | RadioButton |
| 复选框 | CheckBox |
| 颜色按钮 | ButtonA |
| 图像按钮 | ButtonB |
更新日志
| 日期 | 版本 | 说明 |
| 20220120 | 1.0.0.0 | 1.0正式编译 |
| 20241221 | 1.0.1.0 | 按钮控件:修复鼠标放开时,不在控件区域内仍触发事件的bug 单选框控件[CRadioButtonA]:修复自身可以被取消选择的bug 列表框控件[CListBoxA]:修复在设计器中设置itemHeight时未及时刷新显示的bug |
| 20250101 | 1.1.0.0 | 新增控件[Cbuttonc]: 为Cbuttona和Cbuttonb的结合体 Cbuttona绘制颜色+文本 Cbuttonb绘制图片+文本 Cbuttonc绘制颜色+图片+文本 支持透明通道 用于实现带图标的颜色按钮 |
| 20260922 | 1.1.1.0 | 增加控件:VScrollBar和HScrollBar,为横向滚动条和纵向滚动条,支持自动识别同层控件,双色轨道,右键点击直达,隐藏箭头,图像代替箭头,隐藏箭头区域,隐藏滑块, |
| 20260927 | 1.1.2.0 | 增加控件:TextBox,继承自Control,自绘完整的功能,横向滚动条和纵向滚动条使用前两天开发的控件 |
| 20261010 | 1.1.3.0 | 增加控件:ContextMenu,自绘右键菜单,功能完整,全部颜色可设置,修改TextBox控件的右键菜单改为调用ContextMenu。 |
| 20261012 | 1.1.4.0 | 增加控件:ArgbColorEditor,为ARGB颜色值编辑控件,可通过滑块条设置透明度,使用例子可查看【调用ArgbColorEditor】 |
| 20261022 | 1.1.4.1 | 优化控件:TextBox,在普通文本框的基础上,增加了行号显示,括号识别,等一系列偏向代码框的功能(未实现代码高亮) |
| 20261023 | 1.1.5.0 | 增加图片框PictureBox控件。支持常见的显示模式,支持鼠标操作功能(由bool属性控制是否启用),左键拖放,滚轮缩放,右键复原。支持获取滚轮放大后实际显示的区域。 |
| 20261024 | 1.1.6.0 | 增加蚂蚁线控件AntLine,支持设置两种颜色(ARGB),长短,间隔,大小,鼠标操作(左键移动缩放,滚轮缩放,边缘调整大小,限制移动范围),刷新间隔。可变矩形和固定矩形等 为PictureBox控件增加内置AntLine控件,可由pictureBox1.AntLine.Visible = true;启用, 可实现两个PictureBox联动,一个使用蚂蚁线框选范围,由另一个PictureBox放大显示蚂蚁线内图像,例子可查看【PictureBox蚂蚁线联动】 |
| 20261025 | 1.1.7.0 | 优化控件:VScrollBar和HScrollBar,增加联动功能,拖动一个滚动条时,其他滚动条也会同时联动,例子在【VScrollBar或HScrollBar联动】 ,同时使用了VScrollBar和HScrollBar的其他控件也支持联动,例如在textBox,一个textBox的滚动条被拖动,其他textBox的滚动条也会同步联动,例子在【textBox滚动条联动】 |
| 20261026 | 1.1.7.1 | 优化控件:ProgressBarA(支持等待功能) 修复等待状态绘制进度时覆盖边框的bug, |
| 20261027 | 1.1.8.0 | 优化控件:ProgressBarB与ProgressBarC 增加控件:ProgressBarD,在C的基础上,绘制方式改为贝塞尔曲线 |
| 20261029 | 1.1.8.1 | 优化控件:progressBarE 属性中增加模式一与模式二 模式一只点亮当前value块 模式二点亮所有value的路径块 |
| 20261030 | 1.1.8.2 | 优化控件:ProgressBarF 增加bool属性是否绘制中心圆环 优化控件:SwitchButton 优化控件:RadioButton 增加CirclePadding属性,用于设置圆圈距离控件边缘的边距(像素)。 增加RingThickness属性,用于设置圆环边框的线条粗细(像素)。 |
| 20261031 | 1.1.8.3 | 优化控件:ProgressBarA 增加进度模式,模式二为带圆角的中心进度 增加等待模式,模式二为左右往返 优化控件:CheckBox 优化控件:ButtonA 优化控件:ButtonB |
特别说明
DPI导致字体模糊,可开启PerMonitorV2, 在App.config中配置: | <?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/> </startup> <System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2" /> </System.Windows.Forms.ApplicationConfigurationSection> </configuration> |
使用例子
| 调用ArgbColorEditor | //Color? picked = ArgbColorDialog.Show(Color.Pink);//默认颜色
Color? picked = ArgbColorDialog.Show();
if (picked.HasValue)
{
Console.WriteLine($"A={picked.Value.A}, R={picked.Value.R}, G={picked.Value.G}, B={picked.Value.B}");
}
else
{
Console.WriteLine("用户取消了选择");
} |
| PictureBox蚂蚁线联动 | private void button1_Click_2(object sender, EventArgs e)
{
pictureBox1.AntLine.Visible = true;
pictureBox1.AntLine.WheelZoomEnabled = true;
pictureBox1.AntLine.FixedSize = true;
pictureBox1.AntLine.AntRectMoved += AntLine_Changed;
pictureBox1.AntLine.AntRectResized += AntLine_Changed;
} /// <summary>
/// 蚂蚁线发生变化时,更新 pictureBox2 的画面
/// </summary>
private void AntLine_Changed(object sender, EventArgs e)
{ // 1. 获取当前蚂蚁线矩形
Rectangle antRect = pictureBox1.AntLine.AntRect; // 2. 如果蚂蚁线为空,或者太小(比如小于 2x2 像素),清空 pictureBox2
if (antRect.IsEmpty || antRect.Width < 2 || antRect.Height < 2)
{
pictureBox2.Image?.Dispose(); return;
} // 3. 调用之前写好的方法,从 pictureBox1 中截取蚂蚁线内的真实图像
Bitmap newBmp = pictureBox1.GetImageInRectangle(antRect); // 4. 如果没有截取到有效图像,直接返回
if (newBmp == null)
{ // 注意:如果矩形还在拖动中,偶尔返回 null 是正常的(比如拖出了原图范围)
return;
} // 5. 【关键】释放 pictureBox2 原有的图像,防止内存泄漏(GDI+ 对象暴增)
if (pictureBox2.Image != null)
{ var oldImage = pictureBox2.Image;
pictureBox2.Image = null; // 先置空解除绑定
oldImage.Dispose(); // 再释放资源
} // 6. 赋上新的图像
pictureBox2.Image = newBmp;
} |
| VScrollBar或HScrollBar联动 | vScrollBar1.Linkage.Add(vScrollBar2);//执行此命令后,vScrollBar1的value被改变时,会设置vScrollBar2的value |
| 【textBox滚动条联动】 | textBox1._hScrollBar.Linkage.Add(textBox2._hScrollBar);//横向滚动条联动 textBox1._vScrollBar.Linkage.Add(textBox2._vScrollBar);//纵向滚动条联动 |
转载请注明出处。
