窗体间传递数据
今天看吕震宇老师的博客,看到一篇文章叫做窗体间传递复杂数据,这篇文章对我吸引力最大的两个字是“耦合”,从学习.Net到现在已经一年多了,在设计模式中多次看到“耦合”这个概念,但是一直不是很理解,或者对这个概念很模糊。实现某种功能,可以有很多方式,但是做软件应该讲究最严谨、最科学的实现,要想成为一个优秀的程序员,必须始终探索更好的实现方式,由于自己现在的水平很低,当我看到什么功能该怎么去做更好一些的时候,忍不住就去多学习一下。这次在网上查了一下耦合的概念:“耦合是指两个或两个以上的实体相互依赖于对方的一个量度”,很显然,低耦合是我们的追求。根据吕老师的博客,自己动手写了一下代码,下面说一下这个过程中学到的东西和感受。
第一点,肯定是讲实现窗体间数据的传递,以前实现这种类似的功能的时候,喜欢用下面两种办法:1、在子窗体中创建公有字段或属性,供父窗体使用;2、将子窗体作为父窗体成员。这两种方式可以实现要求的功能,但是都导致了父窗体于子窗体的耦合过于紧密,对任何一个窗体的修改需要重新编译另外一个窗体。吕老师讲的方法是,依据“依赖倒置”的原则,通过引入一个结果对象,即首先定义一个结果对象,用来存放子窗体返回的结果,就可以避免这种紧耦合,同时也可以传递任意复杂的数据。如果需要在子窗体中改变父窗体状态,也可以在这个结果对象中定义委托与事件来达到目的。自己按照吕老师所讲的,完成程序之后,不禁感叹这样确实完成的很巧妙。详细的代码,不在这粘贴了,给出源博客的链接:http://www.cnblogs.com/zhenyulu/articles/34044.aspx。第二点,说一下完成这次程序中学到的其他知识:1、字符串的分割,属于字符串类型的一个方法,以前用过很多次这个方法了,但是之前用到的时候总是复制粘贴,所以用到的时候有一个大概的印象,但是具体怎么写却一时忘了,在这写在这上面,加强一下记忆,
string[] elements = description.Split(new string[] { "\"" }, StringSplitOptions.RemoveEmptyEntries);
代码中description为之前声明的一个字符串类型的对象;2、程序中用到了DevExpress中的RadioGroup,学习了一下这个控件的用法,可以用RadioGroup属性中Properties的Items添加RadioButton,期间遇到的一个小问题是不同RadioButton中的切换,怎么判断选中了哪一个,用到了radioGroup1_SelectedIndexChanged(object sender, EventArgs e)事件,但是在事件参数e中没有发现类似Index的属性,找了其他事件半天,才想到原来可以这么实现:int index = radioGroup1.SelectedIndex;
3、菜鸟就是菜鸟,很多基础的知识还是不是很了解,以前经常这样写代码:if (cf.ShowDialog() == System.Windows.Forms.DialogResult.OK),cf为一窗体对象,但是不知道这样写的原理是什么,今天终于搞明白了,一般这样写的时候,在该窗体中会有一个按钮,然后将该按钮的ShowDialog设置为OK,然后点击该按钮的时候,上面写的那句代码就是True了,同时,了解了模式对话框和无模式对话框,模式”窗体或对话框必须关闭或隐藏,然后才能继续使用应用程序的其余部分,无模式的则不需要,将窗体显示为有模式对话框用form1.ShowDialog()方法,无模式对话框用form.Show()方法,如果窗体显示为有模式,则在关闭该对话框之前,不执行 ShowDialog 方法后面的代码,但是,当窗体显示为无模式时,那么该窗体显示之后,会立刻执行 Show 方法后面的代码。主要学到的新知识就这些了,另外温习了一下委托的使用,感觉学到的东西还是很多的,当然更大的感觉是需要学的东西还有很多很多,得不断地努力啊。
最后,说一下自己的感受吧。最近这几天发生的事情挺多的,所以感触很多,简而言之就是,工作之后能力是活着的最大本钱,没有能力,其他免谈,所以根据自己现在水平比较低的现状,一定要珍惜好一点一滴的时间,不断的学习知识充实自己,早日证明自己并不比别人差。用一句鼓励自己的话来结尾吧:我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影!

浙公网安备 33010602011771号