前言
上星期人机交互课老师布置了一个作业,让我们实现一个三角形面积计算器,有界面的那种,编程语言不限,并且透露说用c#实现比较方便。由于之前也没有学过c#,抱着试一试的态度开始了c#的“Hello World”之旅。
WinForm or WPF?
装好了VS2015打算写c#,建工程的时候却不知道建c#的什么工程好,上网查了一下,基本上有两个选择,WinForm和WPF,稍微了解了一下两者的区别,WPF晚于WinForm出现,比WinForm对线程的处理更加成熟,同时绘图能力也大有提升。答案似乎显而易见了,我最初是用WPF的,不过到了最后一步画三角形的时候,由于没有找到对应的控件,迫使我转向了WinForm,也许有别的解决办法,暂时不去研究了。
界面设计&添加事件
看着微软的c#教程,就开始编写代码了。果然简单,控件都是直接从工具箱拽入页面的,然后在属性窗口可以设置各种属性,相比于上学期学的java GUI设计,实在是太方便,大大提高了开发效率。
拖拽几个简单的控件,设计好布局,下面要做的就是为控件添加事件。用于输入的三个TextBox我都添加了Textchanged事件,用于判断用户当前输入是否合法等,Button控件添加了Click事件,点击之后可以计算三角形的面积,同时在控件PictureBox中绘出大致的三角形。
关于绘制三角形这一块,倒是浪费了我不少时间。一开始是System.Drawing这个命名空间找不到,搞了半天发现要自己添加引用,还有就是从WPF转向WinForm的原因,WPF下没找到合适的存放绘制好的三角形的控件,但发现了WinForm下的Picturebox控件可以解决这个问题,遂转向了WinForm。另外则是绘制三角形的函数通常需要知道点的坐标,而我们给出的是边长,这里我采用了固定最长边在某一水平线的方法,计算出三个点的坐标,然后绘图。
具体实现效果如下:
输入边长不合法的情况
输入边长不能构成三角形的情况
计算出面积的情况
部分事件代码:
代码如下 | 复制代码 |
using System; namespace triangle_area private void button_Click(object sender, EventArgs e) if (a + b > c && a + c > b && b + c > a) double max_len = Math.Max(Math.Max(a, b), c); double factor = 300/max_len; Graphics g = pictureBox1.CreateGraphics(); Point point1 = new Point((int)left_margin, 270); g.FillPolygon(blueBrush, curvePoints);
private void len_a_TextChanged(object sender, EventArgs e) if (a + b <= c || a + c <= b || b + c <= a) private void len_b_TextChanged(object sender, EventArgs e) if (a + b <= c || a + c <= b || b + c <= a) private void len_c_TextChanged(object sender, EventArgs e) if (a + b <= c || a + c <= b || b + c <= a) |
最后还是要吐槽一下vs里面的c#代码规范,大括号换行什么的看得好不习惯呢