【问题标题】:Managing Multiple settings in c#在 C# 中管理多个设置
【发布时间】:2015-01-24 23:16:23
【问题描述】:

我在 c# 的属性下创建了两个设置文件。基本上我必须根据一组特定的条件应用设置

例如设置文件是“myset1”和“myset2”

这两个设置都有相似的结构

myset1
  price = 100
  qty = 100

myset2
  price = 150
  qty = 20

在我的应用程序中,如果变量“appColor”的值为“蓝色”,则必须使用 myset1,如果变量“appColor”为“红色”,则必须使用 myset2。

在我的代码中

productPrice.Text = //based on the "appColor" selection value from myset1 or myset2 has to be displayed.

我试过了,但没用

Settings setSelector = new Settings();

if(appColor == "blue")
{
    setSelector = myset1.Default;
}
else(appColor == "red")
{
    setSelector = myset2.Default;
}

我收到“无法将源类型“myset1”转换为设置”的错误

编辑:我的目标是 productPrice.Text = setSelector.Price;即使更改设置也保持不变,因此我不必在此处更改代码,只需更改设置即可。基本上完整的表格会根据所选设置填写。

任何帮助将不胜感激

【问题讨论】:

  • 为什么要添加.Default
  • 你在哪里实例化 myset1myset2 变量?
  • 实例化是在应用加载时完成的。当 appColor 的值改变时检查值,即当组合框选择改变时。
  • 您的错误只是告诉您myset1.Default 变量不是Settings 类型。
  • myset1 和 myset2 是实际的设置文件吗?

标签: c# wpf settings


【解决方案1】:

在玩了一会儿并参考了这个MSDN article,特别是最后一节关于添加备用设置的部分。

添加一组附加设置

  1. 从“项目”菜单中,选择“添加新项”。 “添加新项目”对话框打开。

  2. 在“添加新项目”对话框中,选择“设置文件”。

  3. 在“名称”框中,为设置文件命名,例如 SpecialSettings.settings,然后单击“添加”将文件添加到您的 解决方案。

  4. 在解决方案资源管理器中,将新设置文件拖到“属性”文件夹中。这允许您的新设置在 代码。

  5. 在此文件中添加和使用设置,就像使用任何其他设置文件一样。您可以通过 Properties.SpecialSettings 对象。

然后我意识到每个设置文件都是它自己独立的类,因此您必须回到一个公共类。通过这样做,您将失去您的个人属性,并且必须将其转换为正确的类。然后我查看了这个SO question 搜索动态转换。根据 JaredPar 的回答,最简单的方法似乎是使用 dynamic 关键字并在运行时确定类类型。

类级声明:

dynamic setSelector;

在表单加载期间初始化它:

private void Form1_Load(object sender, EventArgs e)
{
    if(appColor == "blue")
    {
        setSelector = Properties.myset1.Default;
    }
    else if(appColor == "red")
    {
       setSelector = Properties.myset2.Default;
    }

    textBox1.Text = setSelector.qty.ToString();
}

【讨论】:

    【解决方案2】:

    我尝试了下面的代码。它工作正常。

    我有两个文本框,我在其中根据颜色设置价格和数量。

                Object obj = new Object();
    
                if(appColor == "blue")
                {
                    obj = (System.Configuration.SettingsPropertyCollection)Properties.Settings.Default.Properties;
                    
                }
                else(appColor == "red")
                {
                    obj = (System.Configuration.SettingsPropertyCollection)Properties.Settings1.Default.Properties;
                }
                foreach (System.Configuration.SettingsProperty p in Properties.Settings.Default.Properties)
                {
                    if (p.Name=="Qty")
                        textBox1.Text = p.DefaultValue.ToString();
                    else if (p.Name=="Price")
                        textBox2.Text = p.DefaultValue.ToString();
                }

    我希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2012-05-28
      • 2017-02-21
      相关资源
      最近更新 更多