实习总结:c#开发之旅(一)winform 基础。
连续看了两天的某大型数据管理系统的代码,感觉现在有点头晕眼花的,刚开始我是在main函数入口处设置断点,然后将程序跑起来看看程序运行的顺序,结果各种函数的跳转和类的new马上就把我搞晕 了。后来是直接让程序跑起来,在触发过断点的调试状态下运行程序,如果触发事件,程序是可以自己停下来的,这样我就知道了那些功能到底是在哪里实现的,也可以在运行的过程中点击暂停,用f10开始跑起来,方便定位。
看到现在,也差不多有了一个大概的印象,其实结构倒不是很复杂。里面界面、模块虽然多,但事实上都是很简单的平行关系,并不涉及到复杂的组装,嵌套。整体布局是比较流行的ribbon布局,主界面把各模块的位置分好,功能界面使用splitContainerControl来切换,
如上图,右边是很多的功能模块,主界面需要哪个功能显示在当前最上层,只需要调用 this.splitContainerControl.Panel2.Controls.Add(new TrimLittleFiles());
TrimLittleFiles为右边众多模块的一个类的实现,这个类继承了System.Windows.Forms.UserControl,所以可以直接被加载进入Controls集合里面。TrimLittleFiles设计一般遵循mvc设计思想,只包含控件的展示和数据的输入输出,类似于观察者模式中的facader。
这里推荐一个很好的设计模式----单例模式----以避免窗体的重复实例化。
比较常见的方法是null值判断,声明一个UCForm的全局变量,add之前检查null和dispose避免重复添加,
但设计模式里面给出了一个更简单的解决方案——单例模式:
private staticreadonlyucMyWebBrowserMyInstance=newucMyWebBrowser(); 静态对象,由CLR初始化
public static ucMyWebBrowserucMyInstance 静态属性 对象唯一的访问途径
{ get{ return MyInstance;} } 没有set方法
private ucMyWebBrowser() 将构造函数声明为私有
{ InitializeComponent(); }
使用该类的对象的时候,只需直接使用ucMyWebBrowser.ucMyInstance 即可,无需做其他判断,且无需维护它的引用(因为是静态的)。
两个窗体之间传值: F1中SubForm1sf=new SubForm1(this);,将F1的引用传递给sf
F1中声明了public的get和set方法,在sf中,通过传递过来的引用,可以随时调用get和set方法,达到传值的目的。
一句话备忘:
1,Combobox通过item增加子项,select index 没有选择是-1 。 item从0开始计数,
2,if (openFile.ShowDialog()== DialogResult.OK)//貌似只有winform能用,wpf是用不了的
3,Using里面声明的对象必须实现Idispose
4,StreamWriter sw = File.CreateText(“ e:\temp\targer.txt ”);Writeline sw.Flush(); sw.Close();
5,窗体的缩放版式设计,有三个关键点,
anchor:距离父控件边界的距离,
dock:充满,
“置于顶(底)层”:谁覆盖谁
6,string[] strs = str.Split(':');
Split 意思是以“:“分裂str成若干个字符数组
string[]strs2 =strs[1].Split(newchar[]{' ',' '} , 2,StringSplitOptions.RemoveEmptyEntries);
继续用‘ ’(空格)分割,同时注意第三个参数,意思是去掉为空的strs2[]子项(如果不这样做,会得到几十个为””的string)