本课是C#编程入门的第2讲,主要讲如何用Visual Studio下的C#语言,制作一个“一元二次方程”的计算窗体。 前言(本课程是一个2.0的版本,之前讲过一次一元二次方程的制作,姑且称之为1.0的版本,讲的相对比较繁琐和粗糙,因此重新录制了2.0版本。) 和1.0的版本相比,本课程有2个知识点的升级: 1.增加了过程封装和调用
2.改进了窗体输入的方法 这两处改进能让这个一元二次方程的案例程序更加简洁健壮,比之前的“简陋”技术有很明显的进步。 本课程主要讲的就是这两处改进。 课成分四个部分: 1.课程目的 2.设计要求 3.窗体制作 4.代码编写
第1部分 课程目的总体上,让学员熟练掌握用C#语言制作一个一元二次方程软件的方法。 具体来说,有两项技术需要掌握: 1.掌握文本框调用熟悉从文本框textBox调取数据的正确步骤,在窗体中数据输入输出很常见,因此调用要熟练。 2.熟悉过程调用理解过程调用的意义和作用,掌握调用的技巧。跟本课第1个版本相比,本案例的过程调用是本质性的变化。 第2部分 设计要求
总体要求在窗体里,自动化完成一元二次方程计算、而且不报错。 1.窗体要求要求用Visual Studio做一个窗体,做5个文本框,其中前3个文本框输入一元二次方程的三个系数,后2个文本框输出两个根。 2.自动化要求改动3个文本框的时候,自动显示计算结果。注意观察我的动图演示,你也可以采用别的自动化方式,比如加一个按钮,都可以。 第3部分 窗体制作制作过程分成两步:制作窗体和控件、编写控制代码。 窗体制作的方法:直接从工具箱拉5个文本框进窗体, textBox1、textBox2、textBox3、textBox4、textBox5(VS默认边拉边自动排号) 其余的控件没有了。这一步比较简单,很容易做。 第4部分 代码编写本案例的窗体类里,分为四个部分: 1.计算代码 2.textBox1控制代码 3.textBox2控制代码 4.textBox3控制代码 整体计算过程单独放在计算代码里,作为一个子类。 更改三个文本框的时候,自动调用计算代码。 1.完整代码- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace WindowsFormsApp1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- /*
- C#编程入门第2课(version2)课程要点:
- 本课主要有2个知识点
- 1.TryParse函数的应用:
- TryParse函数这个函数返回类型为bool类型,
- 用以判断作为参数A[参数A必须为字符串]是否可以转换为前面的类型。
- 如果可以转换,那么则将转化结果以out类型参数的方式返回。
- <>为什么要强调呢,因为直接在文本框里输入数字,再删除容易报错。
- <>textBox文本框里输入数字要经常用这个方法,要死记硬背。
- 2.尝试调用函数
- 本案例要更改三个文本框,每次文本框都调用相同的函数Yiyuanercifangcheng(),
- 如果不把计算过程单独拿出来,就要把相同计算过程重复三次。
- 熟悉调用的方式。
- */
- public void Yiyuanercifangcheng()
- {
- double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
- double b = 0;
- double c = 0;
- double x1, x2;
- double.TryParse(textBox1.Text, out a);
- double.TryParse(textBox2.Text, out b);
- double.TryParse(textBox3.Text, out c);
- if (b * b - 4 * a * c >= 0)
- {
- x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- string x11 = x1.ToString();
- string x22 = x2.ToString();
- textBox4.Text = x11;
- textBox5.Text = x22;
- }
- else
- {
- textBox4.Text = "根不存在呦~老铁";
- textBox5.Text = "根不存在呦~老铁";
- }
- }
- private void textBox1_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();//直接调用,非常简洁
- textBox1.SelectAll();
- }
- private void textBox2_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();
- textBox2.SelectAll();
- }
- private void textBox3_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();
- textBox3.SelectAll();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- textBox1.Text = "1";
- textBox2.Text = "2";
- textBox3.Text = "1";
- Yiyuanercifangcheng();
- }
- }
- }
复制代码 2.代码解释计算代码部分 这段代码“Yiyuanercifangcheng()”,是整个计算过程,相当于一个没有返回值的函数,所以加了Void,可以给别的过程调用,前面是Public(不加应该也行)。 这个功能把计算过程固化了,优点很多,非常值得小白深入理解。 听过我第一个版本课程的知道,那个版本的课程,我并没有单独做一个计算代码,因此3个文本输入框内,每个框都要写一模一样的计算代码。这样做的后果是,一旦要修改,3个文本框都要改,比较麻烦而且容易犯错。 把计算过程封装起来可以减少代码行数、降低维护成本、代码也更有层次更清晰。 - public void Yiyuanercifangcheng()
- {
- double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
- double b = 0;
- double c = 0;
- double x1, x2;
- double.TryParse(textBox1.Text, out a);
- double.TryParse(textBox2.Text, out b);
- double.TryParse(textBox3.Text, out c);
- if (b * b - 4 * a * c >= 0)
- {
- x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- string x11 = x1.ToString();
- string x22 = x2.ToString();
- textBox4.Text = x11;
- textBox5.Text = x22;
- }
- else
- {
- textBox4.Text = "根不存在呦~老铁";
- textBox5.Text = "根不存在呦~老铁";
- }
- }
- 下面这一段代码是输入代码,将三个文本框里的数字输入程序。
- double a = 0;//变量先设为0再从textBox里取值,非常使用,避免报错
- double b = 0;
- double c = 0;
- double x1, x2;
- double.TryParse(textBox1.Text, out a);
- double.TryParse(textBox2.Text, out b);
- double.TryParse(textBox3.Text, out c);
复制代码知识点:TryParse函数 这个函数返回类型为bool类型,用以判断作为参数A(参数A必须为字符串)是否可以转换为前面的类型。如果可以转换,那么则将转化结果以out类型参数的方式返回。 这段代码里用到的TryParse函数,是被微软官方文档推荐的文本输入转换函数,优点是不容易报错。 调用之前先把变量的初始值都设置为0,然后用tryParse函数将textBox里的数字转换为变量a、b、c。 接下来的一元二次方程计算代码,计算没有特殊的地方,就是根据一元二次方程的求值公式,先判断是否存在根,然后在进行计算。 如果根不存在,输出的两个文本框里显示根不存在。 需要注意的是在计算结束之后,计算结果x1和x2也要进行一次类型转换,以便于在窗体展示。 - if (b * b - 4 * a * c >= 0)
- {
- x1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- x2 = (-b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
- string x11 = x1.ToString();
- string x22 = x2.ToString();
- textBox4.Text = x11;
- textBox5.Text = x22;
- }
- else
- {
- textBox4.Text = "根不存在呦~老铁";
- textBox5.Text = "根不存在呦~老铁";
- }
复制代码调用代码部分 每更新1个文本框里的内容,程序就会自动进行计算,3个输入文本框只要有变动,就会自动进行程序计算,只要在每个文本框过程中直接输入Yiyuanercifangcheng()就能完成,非常简洁。 如果不用调用代码的方式编程,就需要在每个文本框的过程中都输入计算代码,不仅费时费力,还很容易出错。 - private void textBox1_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();//直接调用,非常简洁
- textBox1.SelectAll();
- }
- private void textBox2_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();
- textBox2.SelectAll();
- }
- private void textBox3_TextChanged(object sender, EventArgs e)
- {
- Yiyuanercifangcheng();
- textBox3.SelectAll();
- }
复制代码最后一段代码,是窗体生成时,自动输入三个变量计算的结果。主要为了展示效果。 - private void Form1_Load(object sender, EventArgs e)
- {
- textBox1.Text = "1";
- textBox2.Text = "2";
- textBox3.Text = "1";
- Yiyuanercifangcheng();
- }
复制代码
本节课程结束,谢谢大家!
|