2.3.1 在Visual Studio中处理事件
正如我们在前一章所看到的那样,事件是个预定义的活动(例如用户点击一个按钮或改变一个窗口的大小),程序可以对此作出响应。在第1章中,我们处理了当用户点击Load按钮时所发生的事件。在此,我们通过Visual Studio而不是文本编辑器来完成这个任务。
读者可能还记得,Load按钮的事件处理方法允许用户选择一个图像文件,并把这个文件中的Bitmap图像赋值给PictureBox控件。这个过程涉及到为这个按钮设置一个Click事件处理方法,并使用OpenFileDialog类来提示用户选择一幅需要加载的图像。
为了在MyPhotos应用程序中复制这个行为,这个事件处理方法的代码将与第1章已经显示和讨论的代码相同。因此,如果读者跳过了那段内容,请回到第1章,了解这方面的内容。
为了使下载的代码与本节的代码匹配,这个应用程序的版本号被设置为2.3。我们并不会在每一节中都提醒读者进行这样的修改,所以读者应该记住这一点。
![]() |
在讨论这段代码之前,读者应该注意Visual Studio的语句自动完成特性。如果读者手工输入代码,很可能已经注意到Visual Studio会在输入代码时弹出类成员信息。图2-3显示了读者在输入btnLoad_Click方法的第1行代码后可能出现的结果。当读者输入“new”之后,Visual Studio会弹出一个可用类列表,并把OpenFileDialog类加亮显示,因为dlg变量属于这种类型。读者可以按Enter键自动接受加亮的类。
![]() |
Visual Studio用不同的图标来表示不同的类型。在这张图中,大多数的项都是类,只不过Orientation是枚举类型。读者可以滚动这个列表,查看其他类型的图标。
这个特性也适用于变量和类,就像new关键字一样。当读者开始输入下一行代码设置对话框的Title属性时,可能会看到与图2-4相似的结果,它显示了dlg变量可以使用的类属性、方法和事件。它们对应于OpenFileDialog类的成员。
再次注意,Visual Studio用不同的图标来表示不同的项。在这张图中,ShowDialog是个方法,Title是个属性。读者可以滚动对话框,找到像Disposed或FileOk这样的事件,以查看它的图标。
![]() |
读者将会注意到,在输入代码时会弹出另一个代码自动完成窗口。Visual Studio所提供的一个非常出色的特性是在输入代码时自动显示方法的签名,并且可以通过箭头键浏览方法的各个重载版本。我们将在第5章中看到,Visual Studio还会提取解决方案所定义的类和结构,把它们集成到这些弹出菜单中。在类中通过<summary>标签所提供的文档也会被包括进来,它提供了一种自动化的说明,向其他程序员提示一个特定成员的重要信息。
当然,和任何特性一样,这些弹出窗口都要消耗一定数量的CPU和系统资源。如果读者在一台较慢的机器上运行Visual Studio,或者读者并不希望出现这种窗口,可以通过图2-5所显示的“选项”对话框来关闭语句自动完成特性。选择“工具”>“选项”将会显示这个对话框。点击左边列表中的文本编辑器设置,选择C#项,然后选择“通用”。
![]() |
图2-5 Visual Studio的“选项”对话框可以启用或禁用语句自动完成特性。智能感应特性提供了另一种语句自动完成设置
在这张图中,读者可以禁用成员自动列表或参数信息列表,或者把两者都禁用。如果读者有所疑问,可以点击问号(?)帮助按钮来了解有关这方面设置的其他细节。
回到我们的btnLoad_Click方法,这里所使用的代码与第1章的MyForm程序所使用的代码相匹配。另外,请观察位于隐藏的MainForm.Designer.cs文件中的InitializeComponent方法。Visual Studio为btnLoad控件添加了Click事件处理方法。
this.btnLoad.Click += new System.EventHandler( |
编译并运行这个应用程序,验证这个程序现在可以加载并显示图像。如果读者回忆第1章的内容,可能会想起我们曾经说过这段代码假设被选择的文件可以转换为Bitmap对象。如果用户选择了一个实际上并非图像的文件,这个程序将以一种不友好的方式退出。现在是修正这个问题的好机会,我们将在下一节讲述这个话题。
| 回书目 上一节 下一节 |
|
· 第六章 你能帮我吗?.. · Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. |
· 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||