0

我正在编写一个应用程序,允许用户构建一个显示有关数据库的元数据的报告。预计用户通过应用程序界面构建报告,并随时可以将他们的首选项保存到文件以在另一个应用程序中使用,

现在,我四处搜索,看到了有关应用程序设置等的文章,但我的问题(我相信)有些不同:

假设用户选择了他们希望从中构建报告的项目,我如何将这些选择(通过使用单选按钮)保存到设置文件中,以便当程序再次运行时,用户可以打开设置文件并允许将以前的首选项用于另一个报告。我还希望允许用户在运行时配置报表的页面布局,并将其包含在设置文件中以供将来使用。

我希望我的解释是足够的,由于设置它的人的措辞过多,我自己理解任务有点困难,但是我们努力工作!

4

1 回答 1

2

您可以在用户设置中存储任何可序列化的内容。所以只要定义你的用户选择类和你的页面布局类,你就可以让它像任何字符串或整数一样持久化。
(你可以在这里看到:Custom enum as application setting type in C#?

编辑:在这篇文章中,您可以看到您可以在您的偏好中使用任何对象,包括您在项目中自己定义的对象。为此,您必须提供完整的类名,包括项目的 NameSpace (MyNameSpace.MyPreferenceStorageClass)。

编辑2:所以我将用小例子来描述更多。
1)您必须定义一个将存储您的设置的类。我为我的示例选择任意名称:

Public Class UserChoices
    Public Property DisplayInColor As Boolean = False
    Public Property UseKeyboard As Boolean = True
End Class

一定要设置一个默认值。您需要在编写类后成功编译才能使该类位于当前命名空间内。

2)然后进入项目的设置窗口。添加具有所需名称的设置变量。
我称之为 AppUserChoices。然后选择类型,转到“浏览”,然后键入MyNameSpace .UserChoices 作为类型。
(显然,用您的命名空间替换 'MyNameSpace' ... ;-) )

3)你完成了。我编写了一些代码来使用设置(我把它放在我的 Application 的 Startup 事件处理程序中):

启动它几次。第一次,它应该报告用户选择什么都不是。然后它们就可以了,并且每次颜色设置都会在颜色和黑白之间切换。

   Private Sub Application_Startup
                   (ByVal sender As System.Object, ByVal e As System.Windows.StartupEventArgs)
        If My.Settings.AppUserChoices Is Nothing Then
            MessageBox.Show("AppUserChoices is nothing")
            My.Settings.AppUserChoices = New UserChoices
            My.Settings.Save()
        Else
            MessageBox.Show("AppUserChoices is  **not** nothing")
            My.Settings.AppUserChoices.DisplayInColor = Not My.Settings.AppUserChoices.DisplayInColor
            My.Settings.Save()
            If My.Settings.AppUserChoices.DisplayInColor Then _
                      MessageBox.Show("show colors") _
                Else _
                      MessageBox.Show("show in B&W")
        End If
    End Sub

4) 请注意,您可能希望使用 UserChoices 类来实现 INotifyPropertyChange,以防您在代码中修改它们。(示例:如果用户更改了“DisplayInColor”,您可能希望将“PrintInColor”设置为相同的值。)

5) 对于用户对页面布局的偏好,同样创建一个类来存储布局偏好和设置中的新项目。

6)绑定到设置值,好吧,让另一个 StackOverflow 帖子完成这项工作: 绑定到设置中定义的值

于 2012-08-21T08:34:06.887 回答