Winform中的自定义组件开发(附带一些Windows GDI编程) - Go语言中文社区

Winform中的自定义组件开发(附带一些Windows GDI编程)


开题老规矩,感激女朋友的支持及陪伴,有时候写代码比较忙,想问题想到头大,突然被公司召回,总之就是各种突发事项不能陪她说话,谢谢她一直以来的谅解!

下面进入正题:

在实际开发中,我们会经常遇到系统给定的控件无法满足我们的需求,或者是重复机械去拖同样的控件,这样就很难控制它的位置或者样式,所以我们需要为自己定制一个合适项目的组件!

我个人在使用的过程中,使用的习惯是,如果是自己的项目就会直接在项目里建立一个组件,方便维护代码,如果是专门写给别人用的又不想给别人看代码,则在建立项目时直接选择建立用户自定义控件。

如图:

组件的建立 直接在项目中进行

自定义控件的创建是在项目开始时

这两种的区别还有:自定义的Windows窗体控件库,最后在/Bin文件下生成的是dll,将其拖到要使用的项目中的【工具箱】里就可以直接使用了。组件的话则是你写好代码之后,编译整个项目,就可以直接在工具栏中看到它。

(组件)

大家可以根据实际需求选择这两种方式!

我就我的DEMO讲解一下,这个DEMO是使用组件的,大家各取所需吧!

我的需求是这样的:我需要在检查的时候反馈四种状态:尚未检查、正在检查、通过检查、存在问题四种状态

在检查完一项是要更新它的状态,那么需要的两个参数,就是这个检查项的状态,如果它存在问题,那么要传过来它存在的问题数量,将它画在界面上,看下这种情况的控件样式:

 (使用windows GDI的好处就是全部画上去,我想画在哪都可以,而控件之间存在遮挡 或者边框难看之类的问题)

定义两个属性:

//第一个属性  检查状态
public enum StateInspection
{
/// <summary>
/// 尚未检查
/// </summary>
uncheck,
/// <summary>
/// 检查中
/// </summary>
checking,
/// <summary>
/// 查到错误
/// </summary>
check_error,
/// <summary>
/// 检查通过
/// </summary>
check_pass
}


private StateInspection fECheckState;


[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(true)]
[Description("检查状态"), Category("数据"), DefaultValue(StateInspection.uncheck)]
public StateInspection FECheckState
{
get
{
return fECheckState;
}


set
{
fECheckState = value;
}
}

//第二个属性  错误数量 
private int fEerrorCount;
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(true)]
[Description("错误数量"), Category("数据"), DefaultValue(0)]
public int FEerrorCount
{
get
{
return fEerrorCount;
}
set
{
if (FECheckState == StateInspection.check_error)
{
fEerrorCount = value;
}
}
}

检查状态使用枚举类型,因为这个状态属性只能有四种。

自定义的属性显示在工具栏中:


   在使用的时候后台赋值:

以check_error状态为例

这样我们就完成了自定义组件的属性的定义及使用。在自定义之前,我们需要考虑清楚,哪些值是需要用户给我们的,我们就将其定义为属性,接受参数,然后在组件中去考虑内部实现,外部使用时只调用就好。

在这个项目中还有另一个值得写入的问题,固定这个组件大小,我们选择去覆盖OnResize的方法。

//将其大小固定为140*120
protected override void OnResize(EventArgs e)
{
this.Height = 140;
this.Width = 120;
base.OnResize(e);

}

项目中建立组件和项目外建立自定义控件最后使用dll方式的两种DEMO我都会打包上传,请大家移步我上传的资源文件中下载一下,其实我不想要积分的…但是最少也要选2个积分…,代码已经过调试,希望可以给大家一些思路。

祝好。

谢谢!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qs52955339/article/details/80008854
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:45:02
  • 阅读 ( 853 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢