本章内容:

本章探究 Microsoft .NET Framework 2.0 版提供的控件以及对现有控件的改进。这些功能允许您创建具有专业外观的应用程序,以提供更好的最终用户体验并减少编码工作量。

*
本页内容
应用程序:新的 Windows 窗体控件 应用程序:新的 Windows 窗体控件
应用程序:对现有 Windows 窗体控件的更改 应用程序:对现有 Windows 窗体控件的更改

应用程序:新的 Windows 窗体控件

此应用程序介绍 Microsoft Visual Studio 2005 中的许多新控件,可用它们创建非常棒的 Windows 窗体用户界面。

新概念

多年以来,Visual Studio 始终提供一个庞大的预建控件库,使开发人员能够快速创建 Microsoft Windows 应用程序的用户界面。但是,这些组件的功能和可视化风格经常导致应用程序的外观与其他 Microsoft 产品(如 Microsoft Office 和 Internet Explorer)相比有很大不同。Visual Studio 2005 引入了许多新控件来解决这个问题。这些控件提供与 Microsoft Office 相同的高级外观和自定义支持,以允许您为用户提供熟悉的体验以及更多的个性化选项。

ToolStrip 控件

当今的专业应用程序提供许多功能,使用户能完全自定义其菜单和工具栏的位置、格式以及内容。用户期望可以执行诸如移动工具栏、选择要显示的按钮以及控制每个项中显示多少信息这样的任务。另外,他们还期望这些控件整齐统一地呈现于应用程序中。ToolStrip是支持所有这些功能并为 MenuStrip和 StatusStrip控件提供基本功能的一个新的工具栏控件。您不再局限于只向工具栏中添加按钮。ToolStrip允许添加七个不同类型的项,如 ToolStripButton、ToolStripComboBox、ToolStripTextBox 和 ToolStripSplitButton。

当向窗体添加 ToolStrip时,首先注意到的是它在默认情况下像一个 Office 工具栏。许多控件都支持一种新的可插入呈现框架,允许您选择控件的显示方式。目前 ToolStrip 主要有两种“外观”,可使用 RenderMode属性选择想要的外观。系统提供一个 System 值,指示希望控件遵循当前的 Windows 系统显示设置。另外,还提供一个 Professional 值,指示希望控件外观类似于 Microsoft Office 中的相应控件。

ToolStrip 支持许多新类型的行为,包括漂浮、合并以及项的溢出。漂浮是一种允许用户将工具栏拖放到窗体的不同位置并使该工具栏自动与该位置对齐的一种行为。当向窗体添加 ToolStrip 时,集成开发环境 (IDE) 会自动添加多个 RaftContainer控件来支持漂浮。可以通过设置其 Raft 属性来指定 ToolStrip的初始位置。运行时,用户可以将 ToolStrip移动到任何其他的 RaftContainers 中。

合并是将两个 ToolStrip 中的项组合到一个 ToolStrip 中的行为。可以使用 AllowMerge属性指定特定的工具条是否支持合并。然后,可以使用 MergeAction和 MergeIndex属性管理每个项的合并行为。

项的重新排序是一种允许用户重排工具栏和菜单项的行为。可以通过将 AllowItemReorder属性设置为 True 来启用项的重新排序。在运行时,用户可以在按住 Alt 键的同时拖放项来进行项的移动。

FlowLayoutPanel 和 TableLayoutPanel 控件

Visual Studio 2005 提供两个新的布局控件,以解决一些常见的控件定位情况。常规的面板控件使用绝对位置来确定其各个子控件的位置。而 FlowLayoutPanel 则将每个控件相对于刚好在它之前添加到面板中的控件进行定位。默认情况下,它排列控件的方向是从左至右,从上到下,但您可以通过使用 FlowDirection属性来控制排列的方向。当其中一个子控件的内容或面板的大小发生更改时,您希望控件可以自动进行重定位,这时 FlowLayoutPanel非常有用。

TableLayoutPanel是一个包含不可见表结构的面板,该表结构允许您在每个表单元格中放置一个控件。可以指定内部表应该拥有的行数和列数,以及每行和每列的大小规则。当需要定义一个窗体主要的、固定大小的部分时,TableLayoutPanel非常有用。还可以使用它快速创建表格格式的数据输入界面。但是要记住,只能向每个单元格中添加一个控件。因此,如果想让一个单元格包含多个子控件,就需要先向此单元格中添加一个面板,然后将两个子控件添加到该面板中。

WebBrowser 控件

现在,Visual Studio 2005 为众所周知的 ActiveX Web 浏览器控件提供优化的托管包装。此控件提供对 Internet Explorer 的完整 DHTML 呈现功能的访问。可以使用该控件向应用程序添加多种 Web 浏览功能。例如,允许用户从应用程序中读取 HTML 文档文件。或者允许用户链接到 Internet 上的内容。WebBrowser控件的使用非常简单,它提供一些强大的选项以支持 DHTML 和 WinForm 资源之间的深层集成。

您可以通过简单调用 Navigate 方法并提供资源的 URL 来下载并显示一个文档。一旦加载完成,就可通过 Document 属性以编程的方式访问 DHTML DOM。通过该属性,可以直接读取和修改文档的结构。可以通过一些方法(如 GoForward、GoHome、GoSearch 和 GoBack)来执行标准的导航任务。甚至可以向脚本代码公开托管对象,以允许页面中的脚本调用托管应用程序。而要做的就是向 ObjectForScripting属性提供一个对象。通过处理 WebBrowser 的事件(如 NavigatingNavigated、ProgressChanged 和 DocumentCompleted)完成下载进度的监视。

ActiveDocumentHost 控件

ActiveDocumentHost控件是 Windows 窗体应用程序和 OLE 资源之间的一座桥梁。可通过调用 LoadFrom方法并提供资源路径来加载和显示资源。ActiveDocumentHost将启动一个为该特定类型的资源注册的应用程序实例。例如,如果加载一个 Microsoft Word 文档,ActiveDocumentHost会自动启动 Microsoft Word 并以只读状态显示文档。默认情况下,双击控件会将其切换到可编辑模式,并显示编辑应用程序的工具栏和菜单。可通过一些属性(如 ShowMenus和 ShowToolbars)控制大部分显示内容。

演练

该演练演示了如何使用这些新控件来创建具有更专业外观并更易于使用的 Windows 窗体界面。

创建 Office 界面

DocumentBrowser 窗体显示一个从各种 Microsoft 产品(包括 Office 和 Internet Explorer)中汲取了许多设计元素的界面。请注意,有两个 ToolStrip 呈现为 Office 类型工具栏,该工具栏具有垂直渐变背景且其左侧边缘带有“手柄”。其中一个 ToolStrip 包含一个文本框。还有第三个 ToolStrip 控件,位于窗体左下方,它具有两个项,Documents 和 Web Pages。通过将其 LayoutStyle 设置为 Vertical,可以将 ToolStrip 修改为有点类似于 Microsoft Outlook 的样式。窗体下方的状态栏是一个 StatusStrip 控件,它有两个子控件,StatusStripPanel 和 ToolStripProgressBar。通过将其 Style 属性设置为 Continuous,可以将进度栏配置为以连续条的方式显示进度。

运行应用程序时,单击工具条并将其拖到窗体的任何边缘,可以看到它们都将自动停靠于该侧。这种操作是可能的,因为在窗体的每个边缘都有一个 RaftingContainer控件。当向窗体中添加 ToolStrip时,Visual Studio 会自动添加这些容器。还可以对这些项进行重新排序,甚至可以通过在按住 Alt 键的同时拖动一个项而将该项从一个 ToolStrip移至另一个 ToolStrip。

与 Web 内容交互

该应用程序使用 WebBrowser控件加载和显示 Web 内容。在运行时,单击窗体左下方的“Web Pages”按钮。然后,向工具条的“Address”文本框中输入一个 URL。单击“Go”按钮以定位到该文档。

如果不能访问 Internet,则可使用应用程序目录中一个名为“MSDN Home Page.htm”的 HTML 页。

应用程序加载时,应该注意窗体下方的进度栏和状态文本会进行更新。当文档完成加载时,会看到在浏览器窗格左侧的 History 列表中出现一个条目。该进度的监视可以通过处理多个 WebBrowser事件完成。此过程从 btnGo_Click事件处理程序开始。在这个过程中,通过调用 Navigate 方法告诉 WebBrowser加载一个文档:

wbrBrowser.Navigate(txtAddress.Text)

当 WebBrowser开始定位此资源时,引发 Navigating 事件。wbrBrowser_Navigating事件处理程序从事件参数中检索出此 URL,并向 StatusStripPanel 发送一个消息以指示下载正在进行中:

SetStatus(“Navigating to ‘“+ e.Url + “‘“)

当 WebBrowser加载文档时,它会周期性地引发 ProgressChanged事件。wbrBrowser_ProgressChanged事件处理程序先更新 StatusStrip中的进度栏,如果它已经显示为 100%,则对其进行重置,然后以 5% 的值递增:

If pbrProgress.Value >= pbrProgress.Maximum Then 
ClearProgress() 
End If 
pbrProgress.Increment(5)

WebBrowser完成文档加载后,它将引发 DocumentCompleted事件。可以使用该事件通知用户内容已可用或者记录下载的结果。wbrBrowser_DocumentCompleted事件处理程序从事件参数的文档 URL 中检索文档标题。此信息用于填充一个新的 ListViewItem,并被添加到历史记录列表视图中。该过程结束时对状态文本和进度栏进行重置。

Dim title As String = e.Url 
Dim visited As String = DateTime.Now.ToString() 
Dim docInfo As New ListViewItem(New String(1) {title, visited}) 
lvwHistory.Items.Add(docInfo) 
SetStatus(String.Empty) 
ClearProgress()

与文档内容交互

应用程序还允许您加载并显示注册为允许 OLE 宿主的文件。Office 文档、声音文件以及 .avi 影像文件都是“活动”数据的例子。首先,可通过选择位于窗体左下方的 Documents 按钮来加载一个文件。然后,在 Address 文本框中输入所需文件的本地路径并且单击“Go”按钮。该文档就会在 ActiveDocumentHost 中显示。如果文档可编辑,则双击 ActiveDocumentHost以在其关联的宿主应用程序中启动该文档。宿主应用程序的菜单和工具栏将显示于 DocumentBrowser窗体中。

与 WebBrowser控件相比,ActiveDocumentHost与进度相关的事件较少。但是,当它完成加载并显示文档时,它会引发一个 Loaded 事件。ahdDocument_Loaded事件处理程序首先检索有关所加载文档的信息。然后,它创建一个 ListViewItem并将其添加到历史记录列表视图中:

Dim url As String = adhDocument.SourceDocument 
Dim visited As String = DateTime.Now.ToString() 
Dim docInfo As New ListViewItem(New String(1) {url, visited}) 
lvwHistory.Items.Add(docInfo) 
SetStatus(String.Empty) 
ClearProgress()

小结

.NET Framework 2.0 提供的新 Windows 窗体控件允许您创建外观更专业、功能更强大的应用程序,而无需依赖第三方组件。ToolStrip为您提供了一个强大的机制来创建菜单、工具和状态栏,使它们的外观和行为与用户所熟悉的其他应用程序中对应的控件类似。这可以使用户更快、更直接地接受并提高用户的满意度。WebBrowser和 ActiveDocumentHost允许您将外部数据集成到应用程序中。WebBrowser旨在实现 DHTML 内容可靠且通用的下载与呈现,而 ActiveDocumentHost则提供一种用于承载和编辑 OLE 数据类型的机制。

应用程序:对现有 Windows 窗体控件的更改

此应用程序研究了对 Windows 窗体框架的一些更改和新增功能,这些更改和新增功能会影响许多现有以及新的 Windows 窗体控件。

新概念

.NET Framework 2.0 和 Visual Studio 2005 引入许多 Windows 窗体开发的新功能,它们对在设计时和运行时如何使用 Windows 窗体控件具有广泛影响。这些功能影响了众多行为,包括控件的布局和定位、运行时数据输入,以及应用程序的配置和个性化。

边距和衬距

确保以一致的方式定位和放置控件,这对于创建易于了解和导航的应用程序非常重要。遗憾的是,定位控件的过程非常费时费力。正确定位的一方面就是确保控件之间的间距量一致。例如,您可能在窗体的下方有一系列的按钮,每个按钮之间均需要有 10 个像素的精确间距。这通常涉及到放置一个按钮,记录其Left属性,然后将下一个按钮的Left属性修改为所需值。另一个例子是,当您有一个容器控件时,您希望确保其子控件与该容器边缘的距离不能小于 8 个像素。此设置至少需要先放置第一个控件作为定位点,然后让其他控件相应地与它对齐。

.NET Framework 2.0 引入了关于控件的两个新概念 — 边距和衬距,从而极大地简化了上述情况中所涉及的工作。边距是两个控件之间的外部间距,而衬距 是一个控件的边缘与其内容之间的内部间距。因此,一个按钮的右边缘与另一个按钮的左边缘之间的距离是它们之间的边距。另一方面,面板的边缘与其子控件之间的间距是该面板的衬距。Control 类现在具有 Padding Margin 属性,因此一个控件可以声明并强制指定其间距要求。

Visual Studio IDE 在设计时使用 Margin Padding 属性,以提供边距和衬距的指示器,并根据它们的 Margin Padding 属性自动对齐控件。这两个属性均为 Padding 类型,该类型是一个允许您为控件的每个边缘提供唯一值的简单结构:Top、Bottom、Left 以及 Right。因此,如果您有一个面板,其 Padding.Left设置为 5,并且您在该面板 上放置了一个子控件,则当子控件的左侧与面板 左侧距离为 5 像素时,IDE 会自动提供反馈。这就允许您快速准确地将控件放置在适当的位置,而无需手动设置其位置属性。当在运行时调整控件大小或者重新定位控件时,这些属性仍然有效。

自动完成

如果您曾经用过 Internet Explorer,就会看过自动完成的操作过程。自动完成是指以下行为:当向一个文本控件中输入数据时,系统会自动建议它认为您可能会输入的内容。该功能通常在用户需要输入很长或很复杂的字符串时最为有用。要让自动完成解决方案起作用,一个先决条件是存在一些数据集,系统可以使用这些数据集来查找可能的匹配项。

现在,可以很容易地向 Windows 窗体应用程序的文本框和组合框中添加自动完成支持。这两个控件都有三个新属性:AutoCompleteMode、AutoCompleteSource 和 AutoCompleteCustomSource。可以通过将 AutoCompleteMode设置为 AppendSuggest 或 SuggestAppend 来启用自动完成。将 AutoCompleteMode设置为 Append 可使最可能的匹配项自动追加到当前数据。如果设置为 Suggest,则会产生由一个或多个建议完成字符串组成的下拉列表。SuggestAppend同时执行这两项任务。该控件还需要一个源列表,这样它就可以在用户输入数据时从中搜索建议。AutoCompleteSource属性允许您从一些系统源中进行选择,例如 FileSystem、HistoryList、RecentlyUsedList、AllUrl 和 CustomSource。

如果选择 CustomSource,则必须向 AutoCompleteCustomSource属性提供一个字符串列表。这可以在设计时或运行时完成。自定义源非常强大,因为它们允许您为业务数据提供自动完成行为。例如,当窗体加载并提供类别名称列表以用作组合框的显示源和自动完成源时,可以从数据库中查询产品类别的列表。该方法允许用户快速选择一个类别,而无需输入完整的类别名称或者手动导航很长的项列表。

配置

.NET Framework 1.1 提供一个基本的应用程序配置机制,以允许您定义应用程序配置文件中的只读应用程序设置。您可以通过 System.Configuration.AppSettings类来访问这些设置,该类通过键来检索设置,并且返回一个必须转换为合适类型的弱类型对象。此机制对于简单情况而言是非常有用的,这些简单情况专注于一般只能由管理员修改的相对静态的数据。但是,许多其他应用程序配置的情况要求有一个更强大、更灵活的解决方案。.NET Framework 2.0 和 Visual Studio 2005 为 Windows 窗体应用程序提供了一个新的配置系统。该系统解决了先前解决方案的限制,并且引入了许多新概念,使您感受到更完整、更有效的设计时体验和更加个性化的最终用户体验。

这里所提供的内容将在市场发布 (RTM) 版中出现。在写作本书时,该配置系统仅部分实现。

重要事项从现在开始,“配置系统”指由 .NET Framework 2.0 和 Visual Studio 2005 提供的新配置系统。

配置设置该配置系统对配置设置的定义、读取以及写入提供了更强大的支持。每个设置均按其名称、数据类型、作用域、默认值以及可访问性进行定义。所有的设置都是强类型的,并且您可以指定任何可序列化的类型。该配置系统支持许多持久化设置值的机制,包括字符串表示、XML 序列化以及二进制序列化。

还可以将设置定义为如下两个作用域之一:用户或应用程序。应用程序设置是只读的,并且其值由计算机上此应用程序的所有用户共享。默认情况下,这些值存储在应用程序配置文件中。用户设置是针对每个用户进行存储和管理的,存储在 user.config 文件中。可以将用户设置配置为读/写或者只读。用户设置的一个主要功能就是配置系统对漫游 Windows 配置文件的支持。如果指定用户设置应该与该用户的 Windows 配置文件一起漫游,那么当他们从另一台计算机运行应用程序时,这些设置就会自动跟随。下面是一些配置设置的示例:

<userSettings> 
<WindowsApplication1.MySettings> 
<setting name="DefaultView”serializeAs="String"> 
<value>AllEmployees</value> 
</setting> 
<setting name="Credentials”serializeAs="System.Net.NetworkCredentials"> 
<value>some binary representation…</value> 
</setting> 
</WindowsApplication1.MySettings> 
</userSettings> 
<applicationSettings> 
<WindowsApplication1.MySettings> 
<setting name="Employee_CS”serializeAs="String"> 
<value>server=localhost;initial catalog=northwind</value> 
</setting> 
</WindowsApplication1.MySettings> 
</applicationSettings>

包装类配置系统需要您使用包装类来访问存储于配置存储中的设置。这些包装类向配置系统提供了强类型的接口,并且提供了完整描述每个设置的元数据。这就允许包装类的用户无需直接访问配置文件就可以理解每个设置的配置方式。

您应该了解,配置系统是通过一个可插入的体系结构来连接设置存储的。最初,系统只支持配置文件中的存储设置,但是最后会支持许多潜在的设置存储。

下面是先前显示的设置的包装类:

Imports System.Configuration 
Imports System.Net 
Public Class SettingsWrapper 
Inherits System.Configuration.ApplicationSettingsBase 
<ApplicationScopedSettingAttribute(), _ 
DefaultSettingValueAttribute(“server=local;initial catalog=northwind”)> _ 
Public Overridable ReadOnly Property Employee_CS() As String 
Get 
Return CType(Me(“Employee_CS”),String) 
End Get 
End Property 
<UserScopedSettingAttribute(), _ 
DefaultSettingValueAttribute(“AllEmployees”)> _ 
Public Overridable Property DefaultView() As String 
Get 
Return CType(Me(“DefaultView”),String) 
End Get 
Set 
Me(“DefaultView”) = value 
End Set 
End Property 
<UserScopedSettingAttribute()> _ 
Public Overridable Property Credentials() As NetworkCredential 
Get 
Return CType(Me(“Credentials”), NetworkCredential) 
End Get 
Set 
Me(“Credentials”) = value 
End Set 
End Property 
End Class

在应用程序代码中使用包装类来访问和修改配置设置。例如,下面的代码用于检索存储在名为 Credentials 用户设置中的 NetworkCredential。

Dim wrapper as New SettingsWrapper() 
Dim cred as NetworkCredential = wrapper.Credentials

IDE支持虽然可以手动创建配置文件和包装类,但是 Visual Studio 2005 对这两个任务都提供完全的 IDE 支持。在 Visual Basic .NET 中,可以通过右键单击解决方案资源管理器中的项目并选择“Properties”来访问设置设计器。在属性页列表中,选择“Settings”。将看到一个设计器,它允许您定义应用程序和用户设置的所有方面。在设计器中保存更改时,Visual Basic 会自动创建并填充相应的配置文件。它还将创建一个包装类,并通过 My Object 使该包装类可作为 My.Settings 进行访问。

Visual Studio 还将设置完全集成到 Windows 窗体设计体验中,以提供一种将控件属性绑定到应用程序和用户设置的便捷机制。这种设计体验与现在的数据绑定的设计体验相似。“Properties”窗口中有一个名为 ApplicationSettings的新部分。选择该属性时,会出现一个对话框,允许您将各个控件属性绑定到配置设置。因为设置是强类型的,所以 IDE 甚至可以筛选可用设置列表,以便只显示与当前所选属性类型一致的设置。该过程生成的代码可以用设置值填充控件的属性,但当此属性更改或应用程序结束时,该过程不会添加代码更新这些设置值。

目前,您需要手动实现设置存储的任何已更改值的持久化。这项任务并不困难,但是如果考虑到通常情况下会有许多指向配置设置的控件属性,则该任务可能非常耗时。为了减轻这种负担,一些控件将提供自动加载和持久化其属性值的内置支持。该支持主要应用于布局及面向格式设置的属性,例如容器控件(如 Form 和 SplitContainer)的 Location Size。其他控件(如 ToolStrip)可能支持其他属性,例如其各个项的顺序及其当前的漂浮位置。支持自动配置持久化的控件有两个新属性,SaveSettings和 SettingsKey。

演练

此演练演示如何使用衬距、自动完成以及新的配置系统来创建更强大的用户界面。

使用衬距

此应用程序的设计目标是研究复制 Microsoft Office 应用程序外观的简单方法。例如,Microsoft Outlook 将界面的功能区组织到由可移动拆分器分隔的面板中。每个可视化面板都有一个单像素的深蓝色边框,并且在面板外围以及面板之间都具有一致的间距。可以使用多种控件组合实现这种外观,此应用程序只研究其中之一。

SplitContainer 是主要的容器控件,它在左侧显示历史记录列表和一些按钮,而在右侧显示 Web 内容和文档内容。SplitContainer由两个面板 组成,这两个面板由一个拆分器 分隔。虽然面板控件不允许直接指定边框的颜色,但是仍然可以很容易地实现前面所描述的外观。首先,将面板控件的 BorderStyle属性设置为 None。接着,将 BackColor属性设置为您所需要的边框颜色。最后,设置 Padding.All属性以定义边框的宽度。现在,在该面板上放置一个控件并将其 Dock 属性设置为 Fill 时,该面板会在控件周围提供一个有色的边框。

使用自动完成

在工具条的 Address 文本框中键入资源的 URL 时,该文本框会使用自动完成功能进行提示。如果您选择该文本框,您会看到其 AutoCompleteMode属性设置为 Suggest。此设置与 Internet Explorer 的自动完成行为是一致的。AutoCompleteSource属性根据您搜索的资源类型而变化。当您单击窗体左下方的“Documents”或“Web Pages”按钮时,DocTypeButton_Click事件处理程序将运行。该事件处理程序执行界面上的一些基本状态维护任务。其中一个任务就是更改文本框的 AutoCompleteSource。如果用户单击“Web Pages”按钮,则 AutoCompleteSource设置为从所有可解析的 URL 中提供建议。如果用户单击“Documents”按钮,则 AutoCompleteSource设置为只使用文件系统:

txtAddress.AutoCompleteSource = AutoCompleteSource.AllUrl 
. 
. 
. 
txtAddress.AutoCompleteSource = AutoCompleteSource.FileSystem

可以通过运行应用程序测试这种行为,单击“Web Pages”按钮,并且输入以 http:// 开头的 URL。您应该看到一个建议列表自动出现在文本框下方的下拉列表中。如果输入一个以驱动器号(如 C://)开头的文件路径,则不会获得任何建议。接着,单击“Documents”按钮并且再次输入以 http:// 开头的 URL。这次您也不会获得任何建议,因为 AutoCompleteSource只使用文件系统。

使用新配置系统

在写作本书时,新的配置系统在 Visual Studio .NET 中还不具备全部功能。但还是应该了解其中可用的功能以及这些功能是如何实现的。该应用程序使用配置系统为用户提供个性化服务,方法是在窗体关闭时自动保存一些界面状态。当应用程序启动时,这些信息重新加载,这样用户就可以看到与上次离开时一样的界面。特别地,应用程序会存储 SplitPanel中拆分器的位置以及用户会话之间窗体的 WindowState。另外,应用程序允许用户通过一个选项对话框打开或关闭此功能。

可以通过转到项目属性并选择“Settings”选项卡来查看设置配置。您会看到定义了三个设置:WindowsStartupState、RememberFormState 和 SplitterDistance。这些设置的类型分别是 FormWindowState、Boolean 和 Int32。同时也已指定其默认值。请注意,虽然这三个设置都是用户设置,但是可以很容易地将它们定义为应用程序设置。如果要查看配置文件和包装类驻留的位置,则单击解决方案资源管理器中的“Show All Files”按钮展开 My Application。在 My Application 下面,会看到 MySettings.settings 和 MySettings.vb。MySettings.settings 是包含设置定义的 XML 配置文件。MySettings.vb 是访问这些设置的包装类。

如果将 RememberFormState设置为 True,应用程序会在启动时使用 WindowsStartupState和 SplitterDistance 设置。此决策在 DocumentBrowserForm_Load事件处理程序中发生。应用程序还会在其关闭时将这些属性值写回到配置设置。DocumentBrowserForm_FormClosing事件处理程序首先检查 Boolean设置,以确定用户是否想要持久化界面更改。如果是,该事件处理程序就简单地从相关属性中读取数据,然后将它们分配给相应的配置设置。一旦设置完成所有的设置,就可调用包装的 Save 方法将所做的更改发送到配置文件:

If My.Settings.RememberFormState Then 
My.Settings.WindowStartupState = Me.WindowState 
My.Settings.SplitterDistance = SplitContainer1.SplitterDistance 
My.Settings.Save() 
End If

用户可以通过选择主窗体中的 Tools | Options 菜单命令来更改 RememberFormState设置。将打开 OptionsForm,OptionsForm 提供一个复选框,用户可以通过该复选框修改 RememberFormState设置的值。

小结

边距和衬距、自动完成以及新的配置系统体现了 Windows 窗体技术中的主要进步,这些技术将在发布 .NET Framework 和 Visual Studio 的下一版本时可用。这些功能对开发人员和最终用户的 Windows 窗体体验均有广泛影响。开发人员工作效率的增强功能(如边距和衬距)允许您更高效、更一致地进行界面布局。最终用户工作效率的增强功能(如自动完成)允许用户更快、更准确地完成任务。最后,改进的配置系统为所有 Windows 窗体应用程序提供了新层次的灵活性、管理、自定义以及个性化。

posted on 2005-12-05 22:27  VortexDragon(旋风龙)  阅读(1472)  评论(0编辑  收藏  举报