本文是讲解C#.net平台的Winform框架下的第四个内容,手把手介绍上位机项目的创建方式以及一些写软件时常用的功能,讲解从零开始的每一个步骤。
本次介绍上位机中新窗口的建立方式和软件示波器的代码原理。
从此节开始,所有代码附后
一般上位机可以和其他功能在同一个窗口下显示
然而随着功能逐渐复杂后,需要新建一个独立的窗口来完成示波器的功能。
新建一个用于打开新窗口的按键


双击Button按钮,后面编写新窗体函数

创建一个新的窗口


给窗口加上标签
回到主窗口的函数,声明一个新窗体实例

回到主窗口按键的函数,添加如下代码创建并开启新窗口
为了避免多次创建,需要判断当前新窗口是否存在
运行程序,可以开启关闭试一试

前期粗略展示

所有的图像无非是一帧一帧的动画组成的
一帧动画由点线面和各种图案文字组成
为了画出这图案,就需要知道点的坐标,和其他的一些绘图参数(如颜色等)
图案分为两组,一种是固定不变的(背景图案),还有不断变化的(波形曲线)
对于一个窗口的来说,左上角即为坐标原点,既(0,0),往右是x轴,往下是Y轴
了解了这些基本原理,下一节便可以在新窗口中进行作图了
附主窗口功能代码供参考
- 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 WinForms_Start1
- {
- public partial class Form1 : Form
- {
- int a = 1;//用于定时器计数
-
- FormScope form_Scope; //声明一个示波器窗口的类
-
- public Form1()
- {
- InitializeComponent();//窗口初始化
- //这里我们设置两个串口,一个发送,另一个接受
- //设置串口1参数
- serialPort1.PortName = "COM1"; //端口为串口一
- serialPort1.BaudRate = 9600; //波特率9600
- serialPort1.Parity = System.IO.Ports.Parity.None; //校验位无
- serialPort1.DataBits = 8; //数据位8
- serialPort1.StopBits = System.IO.Ports.StopBits.One; //停止位1
- //设置串口2参数
- serialPort2.PortName = "COM2"; //端口为串口二
- serialPort2.BaudRate = 9600; //波特率9600
- serialPort2.Parity = System.IO.Ports.Parity.None; //校验位无
- serialPort2.DataBits = 8; //数据位8
- serialPort2.StopBits = System.IO.Ports.StopBits.One; //停止位1
-
- //serialPort1.Open(); //打开串口1
- //serialPort2.Open(); //打开串口2
-
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- a++;
- //lbl1.Text = a.ToString();
- }
- //发送按钮
- private void btn_send_Click(object sender, EventArgs e)
- {
- byte[] b = new byte[1]; //创建一个保存发送数据的字节数组
- b[0] = Convert.ToByte(textBox3.Text); //将发送文本框里的数字存入数组
- serialPort1.Write(b,0,1); //发送
- }
- //接受按钮
- private void btn_receive_Click(object sender, EventArgs e)
- {
- byte[] buffer = new byte[serialPort2.BytesToRead];//创建一个保存接受数据的字节数组
- serialPort2.Read(buffer, 0, buffer.Length); //将接受的数据保存到数组中
- textBox2.Text = buffer[0].ToString();//读一个字节
- }
- //新窗口
- private void btn_Scope_Click(object sender, EventArgs e)
- {
- //新窗口开启函数
- if (form_Scope == null)//Displayer = null则为第一次创建
- {
- form_Scope = new FormScope();//实例化
- form_Scope.Show(); //显示窗口
- }
- else
- {
- if (form_Scope.IsDisposed)//多次创建通过判断IsDisposed确定是否已关闭,避免多次创建
- {
- form_Scope = new FormScope();
- form_Scope.Show(); //显示窗口
- }
- }
- }
- }
- }