前言
这周我们学院做大实验,简单来说就是用c#语言来编写三个小应用,分别是简单计算器,学生成绩管理界面和超市选址问题,让我们去体会可视化编程的思想。再没有学过c#的情况下,我们靠着老师发的参考资料和上网查询,勉强按时完成了。这次主要来讲讲函数调用的问题。
需求
如上所示
“读取”是将某一指定文件下的数据展示到ListView
框里(没错那个大白框叫ListVIew),剩下的功能分别是对文本进行编辑,所以每次点击剩下的功能后,都要再点一下读取ListView
里的数据才能相应更改。
本着能让用户点一下不让用户点两下的原则(其实是写出自动更新会加分),现在需要实现点击其他按钮后自动调用第一个按钮的方法。
同一窗口下实现
是的,这很简单。拿删除举例,我们只要在删除函数最后调用读取函数就可以了。
函数既可以递归也可以嵌套调用,但是函数嵌套定义是不被允许的
图中,我们在button4_Click函数最后调用了button1_Click函数,参数传入null。
这里有一个问题,如果button1_Click函数后期用到传来的参数的时候,这样写就会出错。更好的方法是定义一个读取函数,然后所有的按钮函数都去调用这个读取函数。
定义更新函数
调用这个函数
这样就解决了传入参数有误的问题
不同窗口下实现
在这个程序中,我们不只有这一个窗口,还有新增/修改窗口和查询窗口
拿新增/修改窗口举例,我们在Form2中直接调用Form1的函数肯定是不行的,
我们需要将Form1传入到Form2中去
原代码
我们传入Form1
与此同时我们在Form2中定义一个Form1
Form1 form1;
接收Form1,传入的Form1是一个局部变量,我们用全局变量接收
当参数与变量名相同时,我们用this.form1表示变量名,用form1表示参数
为了以后调用Form2()防止出错,我们再重载一下Form2函数
public Form2() { InitializeComponent(); }
这样在调用读取函数时,加一个if语句。
if (this.form1 != null) { this.form1.reload(); }
这样在Form2的确定按钮方法里,我们也可以调用Form1的读取函数了。
结语
这个实现的过程里用了很多原来学过的c++知识,算是对原来的知识的复习吧,知识只有去应用他,我们才会记得更牢固,在此感谢学长的帮助。