自定义控件的应用程序设置

当控件托管在第三方应用程序中时,你必须完成某些任务才能使自定义控件能够保留应用程序设置。

大多数有关应用程序设置功能的文档的编写依据都是假定你正在创建独立应用程序。 但是,如果你正在创建一个其他开发人员将在其应用程序中托管的控件,则需要采取一些额外的步骤来使控件正确地保留其设置。

应用程序设置和自定义控件

为了使控件正确地保留其设置,它必须通过创建自己的专用应用程序设置包装类来封装进程,该类从 ApplicationSettingsBase 派生。 此外,主控件类必须实现 IPersistComponentSettings。 该接口包含多个属性以及两个方法,即 LoadComponentSettingsSaveComponentSettings。 如果使用 Visual Studio 中的 Windows 窗体设计器将控件添加到窗体,则 Windows 窗体将在控件初始化时自动调用 LoadComponentSettings;你必须在控件的 Dispose 方法中自行调用 SaveComponentSettings

此外,应执行以下操作,以使自定义控件的应用程序设置在 Visual Studio 等设计时环境中正常工作:

  1. 具有将 IComponent 作为单个参数的构造函数的自定义应用程序设置类。 使用此类来保存和加载所有应用程序设置。 创建此类的新实例时,请使用构造函数传递自定义控件。

  2. 在创建控件并将其放置在窗体(例如窗体的 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 提供值的控件实例都将共享相同的设置。

另请参阅