自定义控件的应用程序设置
当控件托管在第三方应用程序中时,你必须完成某些任务才能使自定义控件能够保留应用程序设置。
大多数有关应用程序设置功能的文档都是根据你正在创建独立应用程序的假设编写的。 但是,如果要创建其他开发人员在其应用程序中托管的控件,则需要执行一些其他步骤,使控件能够正确保存其设置。
应用程序设置和自定义控件
要使控件能够正确保存其设置,它必须通过创建自己的专用应用程序设置包装器类来封装进程,这些包装类派生自 ApplicationSettingsBase。 此外,主控件类必须实现 IPersistComponentSettings。 该接口包含多个属性以及两种方法,LoadComponentSettings 和 SaveComponentSettings。 如果在 Visual Studio 中使用 Windows 窗体设计器 将控件添加到表单,则初始化控件时,Windows 窗体将自动调用 LoadComponentSettings;您必须在控件的 Dispose
方法中自行调用 SaveComponentSettings。
此外,应实现以下内容,以便自定义控件的应用程序设置在设计时环境(如 Visual Studio)中正常工作:
具有构造函数的自定义应用程序设置类,该构造函数采用 IComponent 作为单个参数。 使用此类来保存和加载所有应用程序设置。 创建此类的新实例时,请使用构造函数传递自定义控件。
在创建控件并将其放置在窗体上(例如在窗体的 Load 事件处理程序中)后创建此自定义设置类。
有关创建自定义设置类的说明,请参阅 如何:创建应用程序设置。
设置键和共享设置
某些控件可以在同一窗体内多次使用。 大多数情况下,你希望这些控件保留自己的单个设置。 通过使用 IPersistComponentSettings上的 SettingsKey 属性,您可以提供一个唯一的字符串,作为区分表单中多个控件版本的方式。
实现 SettingsKey 的最简单方法是使用 SettingsKey 控件的 Name 属性。 加载或保存控件的设置时,会将 SettingsKey 的值传递给 ApplicationSettingsBase 类的 SettingsKey 属性。 应用程序设置在将用户的设置保存到 XML 时使用此唯一键。 下面的代码示例演示 <userSettings>
节如何查找名为 CustomControl1
的自定义控件的实例,该实例保存其 Text
属性的设置。
<userSettings>
<CustomControl1>
<setting name="Text" serializedAs="string">
<value>Hello, World</value>
</setting>
</CustomControl1>
</userSettings>
不为 SettingsKey 提供值的控件的任何实例都将共享相同的设置。