C#,Winform,如何用纯代码简便地增加和存取Settings? 200

publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Lo... public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
Text = Properties.Settings.Default.x;
}

private void button1_Click(object sender, EventArgs e)
{
Text = "hello";
Properties.Settings.Default.x = Text;
Properties.Settings.Default.Save();
}
}
上面的x是我在设计时手动添加的,问题是如果不手动创建,应该写怎样的代码实现与现有的相同的功能?
展开
 我来答
youbl
推荐于2018-05-09 · TA获得超过2510个赞
知道大有可为答主
回答量:1844
采纳率:62%
帮助的人:1667万
展开全部
你在代码里,在Settings上按右键,转到定义,会进入Settings的类代码定义,你给Settings这个类,添加你需要的属性,比如:public string xxx;

那么你就可以用 Properties.Settings.Default.xxx;

你在这个类里可以无限定义若干个属性
更多追问追答
追问
我也不是没看见过,注意我的提问,问的是:最简洁。
追答
汗,直接修改Settings的源代码难道不是最简单快捷?
如果你希望的是后续开发n个项目,不用再添加x
你可以自己封装一个类,继承于 System.Configuration.ApplicationSettingsBase
在自己这个类里定义n个属性,

后续的项目里的Settings都从你的这个类继承,就每个项目都可以使用xxx了
仙戈雅3n
2013-08-28 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:895万
展开全部
楼主你好
从你的追问中我觉得你是不是想要实现保存用户的记录?即用户在退出程序前,在窗体里所做的动作都将保存起来,待下次重启程序后依然是上一次退出程序的状态。
比如你所说的"要求的效果是Form上有个按钮,如果不点击按钮,则Text永远为1如果点击了按钮,则Text变成hello,且下次打开就看见Hello"
如果是这种功能的话,我建议你采用两种方法实现:
第1种,用API函数实现
第2种,用IsolatedStorageFile类实现(这种是出自安全角度考虑的,我目前的项目其中有一个功能就采用了这种技术)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友16ad9e1
2013-07-26 · TA获得超过774个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:507万
展开全部

写个类封装一下:

public class SettingsWapper : DynamicObject
    {

        public SettingsWapper()
        {
           
        }
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            string key = binder.Name;
            if (Properties.Settings.Default.Properties[key] != null)
            {
                result = Properties.Settings.Default.Properties[key].DefaultValue;
            }
            else
            {
                result = null;
            }
            return true;
        }
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            string key = binder.Name;
            if (Properties.Settings.Default.Properties[key] == null)
            {
                var property = new SettingsProperty(key);
                property.DefaultValue = value;
                Settings.Default.Properties.Add(property);
                Properties.Settings.Default.Save();
            }
            else
            {
                Properties.Settings.Default.Properties[key].DefaultValue = value;
            }
            return true;
        }
    }


用的时候:

static void Main(string[] args)
        {
            dynamic sw = new SettingsWapper();
            sw.test = "1"; //sw.xxx  xxx作为settings的key 有则更新无则添加
            Console.WriteLine(sw.test);
            sw.test = "2";
            Console.WriteLine(sw.test);
            Console.Read();
        }
更多追问追答
追问
你这代码是运行测试过的吗?能不能麻烦你不要写helper类,直接改成最简单的函数放到Form里面?另外我自己也测试过DefaultValue = value这种表达式,编译器告诉我这个属性是只读的!
追答

编译通过 运行结果看图


至于helper类不helper类的  主要的代码就是TryGetMember和TrySetMember里面

一共也没有几行, 自己动下手吧。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海梦传媒主官方账号
2018-10-08 · TA获得超过226个赞
知道答主
回答量:32
采纳率:0%
帮助的人:2.1万
展开全部
看过你对于其他回答者的追问之后,我不禁想问一下您这位“高”兄,您自己认可您自己的想法吗?您认可您自己的好奇心吗?对于您关注的代码“冗余”问题,我无权干涩,但是我想好意的提醒您一句,如果您过多的关注代码的“冗余”而减少了对于应用程序的功能优化,应用程序的外观美化,那么即使您删除了再多的“冗余”代码,那么应用程序,该慢的还是慢,该丑的还是丑;而对于好奇心来说,我也是无休止的好奇探索,但是最后经验告诉我,无意义的好奇只会浪费你优化及美化应用程序的时间及能力。

那么接下来我更想告诉你的是,不是任何更简洁的代码都对应用程序有更多的优势,有时候简介的代码不能共用,那么将导致你不能写进公共方法中或公共类中供其他地方调用使用,这样,你的应用程序将会把一句简洁的代码,进行成千上万的复制粘贴,对于后期,也更不利于维护,修改一处代码将导致整个程序无法运行,并进行了后期的成千上万的修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天的翼雨
2013-09-22
知道答主
回答量:8
采纳率:0%
帮助的人:10.4万
展开全部
自己 写个xml文件记录下...就是 几个字段罢了 使用linq to xml 可以快速 创建 xml 和修改xml 文件.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式