微软的 框架 版确实很好地满足了我们的要求NET在以下两方面有重要的意义它不仅根本性地改变了开发者构建与发布 Windows 应用程序的方法而且还创建了一个巨大的具有很好伸缩特性的技术平台Visual Studio 就是一个很好的例子它在用户的可定制性和改进的功能性方面都表现的很好这些变化影响的范围主要集中在 Microsoft NET框架中的 Windows 窗体子集从核心的 SystemWindowsForms 命名空间扩展到多种多样的支持性技术既有旧的也有新的包括ADONETObjectSpaces 以及 ClickOnce 部署
在 Visual Studio 的各个方面都能发现生产效率的提高包括增强的集成开发环境改进的控件和数据设计器还有代码生成器由于不必手工编写各种各样预定格式的代码代码编写狂们可能会感到沮丧而我们就可以有更多的时间来享受我们的生活了
SystemWindowsForms
一些重要的工作已经在 SystemWindowsForms 中做好了激动人心的新技术中便包含了 Windows 窗体就在我写本文的同时可用的命名空间数量和公用类型与成员的组成分别增加了% 和 %这无疑标志着 Visual Studio 是一个卓越的产品当然本文中我们没有足够的篇幅来讲述每一件事 Figure 向我们展示了主要改进方面的概览这些新增与加强的改进覆盖面较广例如更好的主题支持改进的数据绑定以及 GridView 控件
Figure 新的 Windows 窗体特性Windows 主题支持
当像以往一样创建一个新的Windows窗体工程后你会发现一个新的变化默认的Windows主题支持一个Windows主题就是一组个性化的用户设定它展示了Windows用户界面的外观你可以通过在桌面上单击鼠标右键并在弹出的显示属性对话框中选择属性|主题属性页来指定桌面主题
因为Windows主题是由用户指定的所以Windows窗体承担了表现它的责任虽然现有版本的NET框架支持Windows主题但是版本需要开发者在文件系统的指定位置添加一个拥有特殊名字的文件来实现而版通过提供ApplicationEnableVisualStyles方法并将每个控件的FlatStyle属性值设为System来支持Windows主题从而简化了版的实现过程 Visual Studio 将会进一步改进此过程在建立新的Windows窗体工程时默认调用EnableVisualStyles 方法使窗体默认支持Windows主题
public class Form : SystemWindowsFormsForm {
[STAThread]
static void Main() {
ApplicationEnableVisualStyles();
ApplicationRun(new Form());
}
}
在以前将控件的FlatStyle属性值设为System就意味着操作系统决定了控件显示时的外观现在当FlatStyle属性设置为默认值Standard时 Visual Studio 的大部分控件都会依据当前正在使用的Windows主题来呈现自己这与先通过系统设定然后保存你在设计器中的设定结果基本上是一样的无论FlatStyle 属性为Standard还是System窗体在运行时会依据主题的改变动态地作出反应却不需要编写一行代码这种关于主题的灵敏性对开发者是有利的
控制布局与配置
支持 Windows 主题只需要创建一个工程或窗体并放入需要的控件然而对窗体上的控件进行布局并对其进行配置是件耗时的工作尤其是那些复杂的窗体为了简便Windows窗体设计器加入了一些新特性目的就是减少这些琐碎事情所消耗的设计时间这些特性包括吸附对齐编辑属性模式以及智能标记这些特性使操作控件更加容易你仍旧可以使用Visual Studio的布局工具条来水平或垂直对齐控件你只需对窗体上的那些控件操纵一次除此之外你可以使用吸附对齐来达到与拖拽控件一样的效果同时避免了在使用布局工具条时选择控件和工具条按钮所带来的设计时间的浪费吸附式对齐表现为一条或多条有粘性的蓝色线条控件在这些线条的导引下与邻近的控件对齐
Figure 编辑属性另一个新特性 编辑属性模式 允许你用Tab键遍历控件并在页面上直接改变它们的属性首先在Windows窗体设计器的上下文菜单中点击选择与其同名的菜单项使编辑属性模式被激活下一步就是遍历控件并按照你的要求修改属性过程如Figure 所示编辑完成后点击返回布局模式回到正常的编辑模式设置属性是一个改变控件的简便方法用另外一个更合适的控件来完全替换当前控件可不容易你需要删除这个控件然后将一个新控件拖入窗体并重新配置它应付像这样复杂的多步设计任务智能标记正好派上用场它将设计时的多步任务合并为一步并在相关控件附近显示菜单项图标作为其标记智能标记也可以处理简单的设计时任务这经常会发生例如在将一个文本框拖放入一个窗体时改变它的Text属性
控件与数据绑定
集成开发环境的另一项改进是Visual Studio 中的Windows窗体提供了新的控件并改进了广受欢迎的旧控件例如文本框和复合列表框Figure 显示了一个用新增控件和使用中的改进控件创建的小型浏览器创建他们所需要的代码比在Windows窗体的上个版本中要少
Figure 使用新控件的Web浏览器这个简单的例子展示了怎样用Visual Studio 中增强的工具箱创建丰富的程序同时减少了代码的编写例如设计这个功能齐全的小型浏览器仅仅花了大约分钟并且只编写了行代码来实现传统的全部网页浏览事件它还实现了URL访问历史记录功能网页导航和HTML呈现的实际工作是由右侧块形容器中的WebBrowser控件完成的分割条和左右块形容器都是由一个SplitContainer控件提供的
Figure 中显示的复合列表框展示了新型的自动完成支持功能自动完成功能通过个属性来实现首先是AutoCompleteMode它可以让你选择样式枚举值来设置自动完成样式:
enum AutoCompleteMode {
None = x// No autocompletion
AutoSuggest = x // Possible matches chosen from dropdown list
AutoAppend = x// Possible matches
// appended to text
// while typing
AutoSuggestAppend = x // AutoSuggest and
// AutoAppend combined
}
除了选择None其他选项都需要你设置AutoCompleteSource属性其值为系统预先设定好的AutoCompleteSource枚举值 :
enum AutoCompleteSource {
FileSystem = x // File system
HistoryList = x// All URLs from History list
RecentlyUsedList = x // All URLs from Recently Used list
AllURL = x // HistoryList + RecentlyUsedList
AllSystemSources = x // FileSystem + AllURL
CustomSource = x// AutoCompleteCustomSource
None = x // No source
}
设定自定义源的复合列表框需要我们提供自动完成选项这些选项可以来自存储在AutoCompleteCustomSource属性中的元素的集合目前复合列表框和文本框是仅有的提供自动完成功能的控件
GridView
工具箱中的大多数控件都支持数据绑定通过底层的数据绑定构件来绑定各种各样的数据源在目前许多情形下尤其是原型和快速开发中数据绑定都是关键Windows窗体开发小组用改进的类型化数据集明显地加强了数据绑定命名空间包括GridView和DataContainer并为快速开发加强了设计时支持这些特性让你开发分区域样式的用户界面或表格样式的用户界面时感到一样的轻松
有时表格样式的用户界面更适合展现绑定的数据并且另一方面微软在其前一个版本的NET框架中包含了DataGrid控件对于Visual Studio 来说Windows窗体开发小组响应了社区中关于DataGrid的反馈并决定构造一个新的表格控件SystemWindowsFormsGridView (参见 Figure )
Figure GridView 列也许DataGrid与GridView(表格视图)最明显的区别就是GridView的对象模型它已经被抽象为一个基于列行的自然表格结构允许开发者通过大量直观的定位函数来操纵每一个单元格包括以下几点
通过样式格式布局和选择项支持丰富的自定义用户界面
与DataGrid相比具有显示更多种类数据的能力新增了一组更加丰富类型包括图像诸如冻结列(与Excel中的相似)这样的精彩特性和运行时列的重新排序(与Outlook中的相似)
构成它的子控件在导航编辑验证自绘和错误处理等方面拥有有超过个事件
结合过去广泛的设计经验这些新特性使我们可以快速自定义控件而不用写很多代码其实是将对DataGrid的特定编码塞进了GridView的方法属性和事件中其中的一个例子就是在DataGrid中通过单击单元格来选择一行 而现在以GridView的SelectionMode 属性的方式暴露出来当然没有一个控件是十全十美的当它们表现出不足时开发者应该依靠其扩展特性来组合出具有自定义特性的控件GridView控件的底层实现都是基于多种单元格行和列的你可以继承并进行扩展总的来说GridView作为表格样式的控件比DataGrid更加引人注目
<