在c#中管理多个设置

时间:2014-11-26 15:01:09

标签: c# wpf settings

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

例如,设置文件是" myset1"和" myset2"

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

myset1
  price = 100
  qty = 100

myset2
  price = 150
  qty = 20

在我的应用程序中,如果变量的值为" appColor"是"蓝"如果变量" appColor"必须使用myset1。是"红色"必须使用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;即使更改设置也保持不变,因此我不必在此更改代码,只需更改设置即可。基本上完整的表单将根据所选的设置进行填充。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

稍微玩了一下并特别引用了这个MSDN article关于添加备用设置集的最后一节。

  

添加一组额外的设置

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

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

  4.   
  5. 在“名称”框中,为设置文件指定名称,例如SpecialSettings.settings,然后单击“添加”将文件添加到您的   溶液

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

  8.   
  9. 像在任何其他设置文件中一样添加和使用此文件中的设置。您可以通过以下方式访问这组设置   Properties.SpecialSettings对象。

  10.   

然后我意识到每个设置文件都是它自己独立的类,因此你必须回到一个公共类。通过这样做,你将失去你的个人属性,并必须将它投射到适当的类。然后我查看了这个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();
}

答案 1 :(得分:0)

我试过下面的代码。它运作正常。

Settings Settings1

我有两个文本框,我根据颜色设置Price和Qty。



            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();
            }




我希望这会有所帮助:)