c# 函数调用

前言

这周我们学院做大实验,简单来说就是用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的读取函数了。

方法二

form1窗口的新增/修改按钮其实是起到了一个调用form2窗口的作用。方法一中,我们将Form1传给Form2是因为执行form2的show函数后直接跳转Form2的函数而不回到Form1中了,如果我们能执行完form2的窗口后还回到这个函数中来,我们就可以在调用form2窗口的函数中直接调用读取函数。
我们改写“新增/修改”按钮的函数

Form2 form2 = new Form2();
form2.ShowDialog();
this.reload();
ShowDialog()    弹出模式化的窗体
Show()              弹出非模式化的窗体
模式窗体,在关闭或隐藏前无法切换到主窗体。
非模式窗体,变换焦点时不必关闭窗体
在调用Show方法后,Show 方法后面的代码会立即执行,调用ShowDialog方法后,调用代码被暂停执行,等到调用ShowDialog方法的窗体关系后再继续执行。而且窗体可以返回一个dialogresult值,他描述了窗体关闭的原因,例如OK,Cancel,yes,no等。为了让窗体返回一个 dialogresult,必须设置窗体的dialogresult值,或者在窗体的一个按钮上设置dialogresult属性。
具体请参考 https://www.cnblogs.com/zhoug2020/p/5844744.html

根据上面的知识,我们可以知道,这样做还有一个好处就是当我们打开Form2时,我们无法再对Form1进行操作,防止发生错误。
最后,我们添加一个dialogResult的值,来当我们按下Form2的取消按钮时,不进行读取。

Form2 form2 = new Form2(this, lvi.Index);
    if (form2.ShowDialog() == DialogResult.OK)
    {
        this.reload();
    }

在Form2确定函数下添加

this.DialogResult = DialogResult.OK;
this.Close();

将取消函数改成

 this.DialogResult = DialogResult.No;
 this.Close();

结语

这个实现的过程里用了很多原来学过的c++知识,算是对原来的知识的复习吧,知识只有去应用他,我们才会记得更牢固,在此感谢学长的帮助。

你可能感兴趣的:(c#)