扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:Microsoft 2007年11月10日
关键字:
要允许用户更改灯的颜色,必须检测到用户的鼠标单击操作。有经验的 Visual Basic 开发人员都知道,可以使用多种方法实现这一目的。我们使用最简单的一种方法,即检测 MouseUp 事件。下面是检测用户单击并更改 Status 属性以与之匹配的代码:
Private Sub TrafficLight_MouseUp(ByVal sender As Object, _ End Sub Private Function Distance(ByVal X1 As Integer, _ |
事件处理非常简单。检查鼠标单击的位置和每个圆心之间的距离。(请注意,圆心分别位于控件下方 1/6、1/2 和 5/6 的位置。如果不太明白,可以在纸上画出来看看。)如果计算出的距离小于圆的半径,则更改 Status 属性。
距离由 Distance 函数使用您可能在代数课中学过的公式计算。请注意,平方根函数是从 System.Math 命名空间中获得的,数学函数通常都保存在该命名空间中。
第 6 步:清理
为了使控件顺利地运作,我们还需要执行一些其他操作。例如,大小改变时需要重新绘制控件。而且,为了不改变控件的比例,我们需要检测影响大小的属性发生更改的时间,然后强制宽度等于高度的三分之一。下面是完成这两项任务的事件处理程序:
Private Sub TrafficLight_Resize(ByVal sender As Object, _ Private Sub TrafficLight_Layout(ByVal sender As Object, _ |
最后,设置控件在工具箱中使用的图标。控件已经有一个看似齿轮的默认图标,但是我们要使用 Visual Studio .NET 附带的红绿灯图标。
控件的工具箱图标是由名为 ToolboxBitmap 的类中的特性设置的。在以 Public Class 开始的行上面插入以下行:
<ToolboxBitmap("C:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons\Traffic\TRFFC09.ICO")> _ |
注意:所有内容都应在一行中。为了便于阅读,我们在第 7 步:生成和测试控件Studio
后放置了一个回车。粘贴该代码时,要确保它们位于一行中,Studio
和.NET
之间只需一个空格,并删除回车。如果您已经将 Visual Studio .NET 安装到其默认位置,那么上述代码将用 Visual Studio 目录中的图标设置该特性。如果您没有将 Visual Studio .NET 安装到其默认位置,则需要相应地更改图标的路径名。
现在 TrafficLight 控件的设计就完成了。选择 Build | Build MyControls(生成 | 生成 MyControls),以创建最终的控件库。
要测试控件,我们需要一个 Windows 窗体项目。您可以在其他解决方案中执行此操作,但在开发控件所用的解决方案中执行会更容易。从菜单中选择 File | Add Project | New Project(文件 | 添加项目 | 新项目)。选择 Windows Application(Windows 应用程序)项目类型,将项目命名为 TestTrafficLight。单击 OK(确定),启动测试所需的 Windows 应用程序。
必须先将 TrafficLight 控件放到工具箱中,才能将其拖放到测试应用程序的空白窗体 1 中。右键单击工具箱中的 Windows 窗体选项卡,然后选择 Customize Toolbox(自定义工具箱)。选择 .NET Framework Components(.NET Framework 组件)选项卡,然后单击 Browse(浏览)按钮。浏览到您的 MyControls 项目所在的位置,然后转到该项目的 /bin 目录。选择 MyControls.dll 组件并单击 OK(确定)。现在,该对话框应如图 2 所示。
图 2:在 Customize Toolbox(自定义工具箱)对话框中,TrafficLight 控件被选中。
您可以看到 TrafficLight 控件旁边有一个复选标记。单击 OK(确定)按钮,在工具箱的 Windows Forms(Windows 窗体)选项卡上,TrafficLight 控件将出现在控件列表的底部。图 3 显示了底部为 TrafficLight 控件的工具箱。
图 3:工具箱底部的 TrafficLight 控件
现在,您可以将 TrafficLight 控件拖放到 TestTrafficLight 的空白窗体 1 中。默认情况下,它被命名为 TrafficLight1。您可以调整控件的大小,重新设置控件的属性,包括 Status 属性,该属性有一个下拉菜单,菜单中包含该属性的三个可能的值。请注意,调整控件的大小或更改其属性时,控件将在设计器中自动刷新。
要恢复属性的默认值,请将 Status 属性更改为 statusRed。然后,右键单击 Properties(属性)窗口中的 Status(状态)属性,并选择 Reset(重置),如图 4 所示。该属性将更改回 statusGreen。如果将 BorderWidth 属性设置为 1 之外的其他值,也可以使用同样的方法恢复其默认值。
图 4:Properties(属性)窗口中 Status(状态)属性的 Reset(重置)选项。请注意窗口底部有关 Status(状态)属性的说明。
如果需要,还可以为控件插入 StatusChanged 事件。然后,可以使用该事件中的以下代码行查看更改后的状态:
MsgBox("新状态为 " & NewStatus.ToString)
要在操作中测试该控件,您需要启动 TestTrafficLight 项目。此时,它还不是该解决方案的启动项目,因此您需要解决它。在 Solution Explorer(解决方案资源管理器)中,右键单击 Solution(解决方案)名称 - Solution Explorer(解决方案资源管理器)中的第一行。选择 Properties(属性),然后将 Single Startup Project(单启动项目)设置从 MyControls 更改为 TestTrafficLight,然后单击 OK(确定)。
按 F5 键启动该项目。将显示带有 TrafficLight 控件的窗体。测试控件:按下不同的灯,查看它们是否亮起。您还可以测试 BorderWidth 属性,尝试在代码中设置灯的 Status 属性。
小结尽管 TrafficLight 是一个简单的控件(虽然曾有开发人员要把它用到真实的项目中),但它却显示了开发复杂控件所需要的所有原理,包括:
创建复杂控件的关键在于熟悉 GDI+ 的绘图能力。如果理解了 TrafficLight 绘制边框和彩色圆的原理,那么您就有了一个好的起点。关键是,有了 Visual Basic .NET,即使象我这么懒惰的程序员也能创建高级的 Windows 窗体。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者