背景:
我写了一个App.config配置文件,在里面定义了模块:
<add key="key1" value="std1|std2|std3|std4" />
以实现winform里的一些参数修改的接口;(App.config里的参数类似全局变量,能够比较灵活修改你的一些配置信息)
在FormDesigner.cs类里面,我想使用这个key1参数作为comBox下拉菜单的内容,代码如下:
1: string CB_SSFN_Items = ConfigurationManager.AppSettings["key1"].ToString();
2: string[] Str_CB_SSFN = CB_SSFN_Items.Split(new char[] { '|' });
出现的问题如下:
1:如果运行代码,一切正常,也没什么错误;
2:不运行代码,Form.cs类会出现下面的错误:
如果注释掉这句话:string[] Str_CB_SSFN = CB_SSFN_Items.Split(new char[] { '|' });
就Form.cs就正常显示我画的Form了;
分析:
1:错误不是运行时的,且运行代码没出现任何问题,判断应该是FormDesigner.cs在生成Form时出现了错误,
2:提示说参数CB_SSFN_Items没有被初始化,应该是没有运行代码前提下FormDesigner.cs无法从以下代码:
string CB_SSFN_Items = ConfigurationManager.AppSettings["key1"].ToString();
中得到"key1"对应的value值,导致CB_SSFN_Items为null,未被初始化;
解决方案:
修改以前的代码:
1: string CB_SSFN_Items = ConfigurationManager.AppSettings["key1"].ToString();
2: string[] Str_CB_SSFN = CB_SSFN_Items.Split(new char[] { '|' });
修改后:
1: string CB_SSFN_Items = string.Empty;
2: CB_SSFN_Items = ConfigurationManager.AppSettings["key1"].ToString();
这样就能正常显示Form.cs了。
总结:
form.designer.cs:对应form.cs,实际上是把你通过设计器拖拽过去的控件在这里实现,也就是说实际上你拖一个控件 这边对应生成代码,然后在form的构造器里调用他。所以你接着就可以在form.cs内部访问到这些控件了。
因此不建议在form.designer.cs内添加代码,如果想在窗体第一次load的时候就load某些参数或功能,可以考虑在form.cs类的如下位置:
public Form()
{
InitializeComponent();//窗体初始化函数
addYourFunctionHere();
}
或者你也可以双击form窗体,添加load事件:
private void Form_Load(object sender, EventArgs e)
{
//add the your code HERE;
}