没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-12-06 10:12:00.000|阅读 1204 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
本文的目标是 Windows MediaPlayer 中酷炫的“五星”级控件。
该控件看起来非常棒,并且提供了一种很好的图形化查看等级的方法,但根据编辑经验,我发现它特别酷。当鼠标悬停在该栏上时,Windows Media Player
突出显示其中的星来显示您当前浮于其上的栏的值,从而提供了一种很好的图形反馈。在各种 Web 站点(包括 Netflix 和
Amazon)中,您可以发现相同类型的用户界面,并且我想在自己的应用程序中拥有这种功能,因此,我决定创建我自己的控件。我将使用 Windows
窗体控件来模拟这种用户界面元素,同时尝试使它具有足够的自定义能力,以便将其用于各种环境。
入门
第一个步骤是创建一个新的类库项目来容纳控件和空的 Windows 应用程序,以作为测试项目。尽管 Windows
控件库项目模板似乎更为合适,并且它可以很好地进行工作,但是在默认情况下,该项目包括用户控件(用户控件一般用于复合控件 ─ 包含一个或多个控件的 Windows
窗体控件),而我需要的只是一个空的类文件。下一步,您必须使当前的、新的空类从 System.Windows.Forms.Control
中继承,这只需在类声明后添加一个单行就可以实现:
Public Class Ratings
Inherits System.Windows.Forms.Control End Class
如果您尝试只使用 IntelliSense? 添加 Inherits 语句,将会遇到一个小问题:使用类库模板来启动您的项目并不会添加对
System.Windows.Forms 程序集的引用,因此,您需要手动添加。此时,可先添加一个对 System.Drawing.dll
的引用,因为最后需要使用自定义绘图控件。 从现在起,我一般遵循以下几个步骤来进行所有的控件开发:
1.为自定义绘图控件添加标准构造函数,设置该控件所需的所有控件样式,以便正确地绘图并尽可能使其平滑。
Public Sub New()
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.DoubleBuffer, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.UserPaint, True)
... 'add any additional initialization code here
End Sub
2.用纸记下配置控件行为和外观可能需要的公共属性清单。
3.将所有这些属性添加为私有成员变量(我喜欢使用匈牙利表示法在每个变量前面添加前缀“m_”来表示内部变量),并包括适当的默认值,如下 所示。
Private m_FilledImage As Image
Private m_EmptyImage As Image
Private m_HoverImage As Image
Private m_ImageCount As Integer = 5
Private m_TopMargin As Integer = 2
Private m_LeftMargin As Integer = 4
Private m_BottomMargin As Integer = 2
Private m_RightMargin As Integer = 4
Private m_ImageSpacing As Integer = 8
Private m_ImageToDraw As Integer = 1
Private m_SelectedColor As Color = Color.Empty
Private m_HoverColor As Color = Color.Empty
Private m_EmptyColor As Color = Color.Empty
Private m_OutlineColor As Color = Color.Empty
Private m_selectedItem As Integer = 3
Private m_hoverItem As Integer = 1
Private m_hovering As Boolean = False
Private ItemAreas() As Rectangle
4.将这些变量放入属性过程,虽然其中大部分过程相当简单(获取值,设置值),但是其中有些过程将需要一些附加代码,稍后我将进行讨论。
5.开始设计和编写自定义绘图代码。
6.最后,添加新的事件,如单击处理或该特定控件所需的特定事件。
带有特定默认值的属性例程
我想要一些自己的属性
─ 处理颜色的那些属性
─ 反映有关控件的其他属性的默认值(如 ForeColor)以及反映用户系统颜色的其他值。例如,让我们只使用其中的一种颜色 HoverColor
来查看可生成默认值的不同方法。
第一种方法是显而易见的,只需在变量声明(或者构造函数)中设置默认值:
Private m_HoverColor As Color = _
Color.FromKnownColor(KnownColor.Highlight)
在多数情况下,这就可以很好地进行工作,但是它存在两个问题。第一个问题是,如果用户在该应用程序运行时更改他们的系统颜色,该怎么办?在重新启动该程序后,该控件将反映正确的颜色,但是当时不会。第二个问题是,如果用户要以编程方式将颜色设置为默认颜色,该怎么办?没有实用方法可以清除颜色设置并将其设置为适当的系统颜色。用户自然会正确地将其设置为适当的系统颜色,但是随后又会再次回到第一个问题。
另外一种方法是在用户系统颜色发生更改时设置陷阱,并相应地更改您的属性值:
Protected Overrides Sub OnSystemColorsChanged( _
ByVal e As System.EventArgs)
Me.HoverColor = Color.FromKnownColor(KnownColor.Highlight)
Me.Invalidate()
End Sub
该解决方案并不会真正地解决问题,除非您有办法通过开发人员使用该控件了解该属性是否会设为默认值或设置为特定的颜色。跟踪该信息的系统开销可能不值得花费这么大的精力。作为替代,我决定使用默认的空值,并在属性例程自身中返回适当的默认值,如下
所示。 这样,就解决了到目前为止我所提出的问题,包括系统颜色更改的处理;了解它何时会返回默认值与用户何时对其进行设置;以及允许用户重新将该值设置为默认值(在
myControl.HoverControl = Color.Empty 时)。
Public Property HoverColor() As Color
Get
If m_HoverColor.Equals(Color.Empty) Then
Return Color.FromKnownColor(KnownColor.Highlight)
Else
Return m_HoverColor
End If
End Get
Set(ByVal Value As Color)
If Not Value.Equals(m_HoverColor) Then
m_HoverColor = Value
Me.Invalidate()
End If
End Set
End Property
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号