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是我在设计时手动添加的,问题是如果不手动创建,应该写怎样的代码实现与现有的相同的功能? 展开
{
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是我在设计时手动添加的,问题是如果不手动创建,应该写怎样的代码实现与现有的相同的功能? 展开
7个回答
展开全部
你在代码里,在Settings上按右键,转到定义,会进入Settings的类代码定义,你给Settings这个类,添加你需要的属性,比如:public string xxx;
那么你就可以用 Properties.Settings.Default.xxx;
你在这个类里可以无限定义若干个属性
那么你就可以用 Properties.Settings.Default.xxx;
你在这个类里可以无限定义若干个属性
更多追问追答
追问
我也不是没看见过,注意我的提问,问的是:最简洁。
追答
汗,直接修改Settings的源代码难道不是最简单快捷?
如果你希望的是后续开发n个项目,不用再添加x
你可以自己封装一个类,继承于 System.Configuration.ApplicationSettingsBase
在自己这个类里定义n个属性,
后续的项目里的Settings都从你的这个类继承,就每个项目都可以使用xxx了
展开全部
楼主你好
从你的追问中我觉得你是不是想要实现保存用户的记录?即用户在退出程序前,在窗体里所做的动作都将保存起来,待下次重启程序后依然是上一次退出程序的状态。
比如你所说的"要求的效果是Form上有个按钮,如果不点击按钮,则Text永远为1如果点击了按钮,则Text变成hello,且下次打开就看见Hello"
如果是这种功能的话,我建议你采用两种方法实现:
第1种,用API函数实现
第2种,用IsolatedStorageFile类实现(这种是出自安全角度考虑的,我目前的项目其中有一个功能就采用了这种技术)
从你的追问中我觉得你是不是想要实现保存用户的记录?即用户在退出程序前,在窗体里所做的动作都将保存起来,待下次重启程序后依然是上一次退出程序的状态。
比如你所说的"要求的效果是Form上有个按钮,如果不点击按钮,则Text永远为1如果点击了按钮,则Text变成hello,且下次打开就看见Hello"
如果是这种功能的话,我建议你采用两种方法实现:
第1种,用API函数实现
第2种,用IsolatedStorageFile类实现(这种是出自安全角度考虑的,我目前的项目其中有一个功能就采用了这种技术)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写个类封装一下:
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这种表达式,编译器告诉我这个属性是只读的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看过你对于其他回答者的追问之后,我不禁想问一下您这位“高”兄,您自己认可您自己的想法吗?您认可您自己的好奇心吗?对于您关注的代码“冗余”问题,我无权干涩,但是我想好意的提醒您一句,如果您过多的关注代码的“冗余”而减少了对于应用程序的功能优化,应用程序的外观美化,那么即使您删除了再多的“冗余”代码,那么应用程序,该慢的还是慢,该丑的还是丑;而对于好奇心来说,我也是无休止的好奇探索,但是最后经验告诉我,无意义的好奇只会浪费你优化及美化应用程序的时间及能力。
那么接下来我更想告诉你的是,不是任何更简洁的代码都对应用程序有更多的优势,有时候简介的代码不能共用,那么将导致你不能写进公共方法中或公共类中供其他地方调用使用,这样,你的应用程序将会把一句简洁的代码,进行成千上万的复制粘贴,对于后期,也更不利于维护,修改一处代码将导致整个程序无法运行,并进行了后期的成千上万的修改。
那么接下来我更想告诉你的是,不是任何更简洁的代码都对应用程序有更多的优势,有时候简介的代码不能共用,那么将导致你不能写进公共方法中或公共类中供其他地方调用使用,这样,你的应用程序将会把一句简洁的代码,进行成千上万的复制粘贴,对于后期,也更不利于维护,修改一处代码将导致整个程序无法运行,并进行了后期的成千上万的修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己 写个xml文件记录下...就是 几个字段罢了 使用linq to xml 可以快速 创建 xml 和修改xml 文件.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询