C#上位机开发(二)

  上一篇大致了解了一下单片机实际项目开发中上位机开发部分的内容已经VS下载与安装,按照编程惯例,接下来就是“Hello,World!”

1、新建C#项目工程

   首先选择新建Windows窗体应用(.NET Framework),然后选择项目保存位置,填写项目名称,这里因为我们不需要用git进行进行版本管理,所以不用新建GIT存储库;

   框架是指.net框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在win7/8/10上运行,鉴于当前大多数操作系统都是win7或win10,选择4.5版本。

  

2、窗体介绍及代码分析

  这里我们双击窗体界面,这也是VS的特性,双击一个控件,就会进入对应代码文件部分,这些代码全由VS在生成项目时自动生成,下面进行详细的解释:

 1 /*filename:Form1.cs*/
 2 //使用命名空间
 3 using System;
 4 using System.Collections.Generic;
 5 using System.ComponentModel;
 6 using System.Data;
 7 using System.Drawing;
 8 using System.Linq;
 9 using System.Text;
10 using System.Windows.Forms;
11
12 //用户项目工程自定义命名空间HelloWorld
13 namespace HelloWorld
14 {
15     //定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form
16     //partial关键字
17     public partial class Form1 : Form
18     {
19         //与类同名的构造方法
20         public Form1()
21         {
22             InitializeComponent();
23         }
24      //用户自定义方法,窗体加载时由Form对象调用
25         private void Form1_Load(object sender, EventArgs e)
26         {
27         }
28     }
29 }

  命名空间(namespace):在C#中用命名空间将很多类的属性及其方法进行封装供调用,类似C语言中将变量和函数封装成一个个.h文件,调用的时候只需要#include "filepath + filename"就可以使用,比如刚开始时用关键字using声明了一些所需要的系统命名空间(line1-10);然后采用关键字namespace来自定义一个用户工程所需的命名空间HelloWorld,在我们定义的这个命名空间里就可以定义一些类和方法来进行下一步的实现;

  类(class:C#是一门面向对象的编程语言,所以最基本的就是类和对象,对象的特征是具有属性(C语言中称为变量)和方法(C语言中称为函数),然后我们定义一个类来描述这个对象的特征,注意:这个时候定义的类不是真实存在的,所以不会分配内存空间,当我们用所定义的这个类去创建一个类的对象,这个对象是真实存在的,它会占用内存空间,比如在这个工程中定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form;

  方法:前面已经说过,在面向对象编程中是没有变量和函数的,所有的函数都被封装在类中,属于对象的方法,最基本的是类的构造方法,该方法与类名同名,在用类创建一个具体对象时自动调用,不可缺少,比如Form1( );另外一种是自己定义的用户方法,比如该类中的Form1_Load()方法,就是在初始化窗口时,通过具体对象Form调用:Form.Form1_Load( );

  访问修饰符:用来控制类、属性、方法的访问权限,常用有5个,默认私有,不能被外部访问;

    私有的private,公共的public,受保护的protected,内部的internal,受保护内部的protect internal

  这里有一个重点,在定义Form1类的时候含有一个关键字partial,这里就不得不说C#语言设计一个重要的特性了,能作为大多数人开发上位机的首选,C#有一个特性就是设计的时候界面与后台分离,但是类名相同,首先看一下工程文件结构:

  可以看到,Form1.cs文件下面包含了另一个Form1.Designer.cs文件,再打开Form1.Designer.cs这个文件,是不是很惊奇,和前面一模一样,再次定义了一个命名空间HelloWorld和Form1类,这个部分类中定义了我们使用的控件、事件委托以及如Dispose方法等。因为这里面的代码都是自动生成的,因此设计成了一个部分类。最关键的一点,这里类也是用partial关键字修饰的,可以看到,Partial是局部类型的意思,允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,用partial定义的类可以在多个地方被定义,最后C#编译器编译时会将这些类当作一个类来处理;

 1 /*@filename:Form1.Designer.cs */
 2
 3 namespace HelloWorld
 4 {
 5     partial class Form1
 6     {
 7         /// <summary>
 8         /// 必需的设计器变量。
 9         /// </summary>
10         private System.ComponentModel.IContainer components = null;
11
12         /// <summary>
13         /// 清理所有正在使用的资源。
14         /// </summary>
15         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
16         protected override void Dispose(bool disposing)
17         {
18             if (disposing && (components != null))
19             {
20                 components.Dispose();
21             }
22             base.Dispose(disposing);
23         }
24
25         #region Windows 窗体设计器生成的代码
26
27         /// <summary>
28         /// 设计器支持所需的方法 - 不要修改
29         /// 使用代码编辑器修改此方法的内容。
30         /// </summary>
31         private void InitializeComponent()
32         {
33             this.SuspendLayout();
34             //
35             // Form1
36             //
37             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
38             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
39             this.ClientSize = new System.Drawing.Size(418, 331);
40             this.Name = "Form1";
41             this.Text = "Form1";
42             this.Load += new System.EventHandler(this.Form1_Load);
43             this.ResumeLayout(false);
44
45         }
46         #endregion
47     }
48 }

  

  Main: 一切程序都有入口主函数main,C#也是如此,在Program.cs文件中定义了Program类,该类中拥有主函数main( ), 在main函数中,第三行代码是一切的开始,调用Form1类的构造函数,创建一个Form对象,一切由此开始,代码如下:

 1 /* @filename: Program.cs */
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Windows.Forms;
 6
 7 namespace HelloWorld
 8 {
 9     static class Program
10     {
11         /// <summary>
12         /// 应用程序的主入口点。
13         /// </summary>
14         [STAThread]
15         static void Main()
16         {
17             Application.EnableVisualStyles();
18             Application.SetCompatibleTextRenderingDefault(false);
19             Application.Run(new Form1());  //调用Form1类的构造函数,创建一个Form对象,一切由此开始
20         }
21     }
22 }

  再来解释一下最后三个文件:第一个文件主要是应用程序发布时的一些属性设置,版本号,属性,版权之类的,其余两个文件是工具自动生成的一些设置文件,不再过多赘述;

/* @filename:Assemblylnfo.cs*/
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("HelloWorld")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HelloWorld")]
[assembly: AssemblyCopyright("Copyright ?  2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]

// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("094ac56a-7a59-4f32-a2eb-857135be4d2c")]

// 程序集的版本信息由下列四个值组成:
//
//      主版本
//      次版本
//      生成号
//      修订号
//
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

3、Hello,World

  下面就正式开始C#程序的设计,首先是界面的实现,可以随意从控件工具箱中拖放控件到窗体中,这里我拖动两个Button和一个TextBox,并在右边设置框中修改每个控价的属性,界面如图:

  这个时候如果查看Form1.cs文件,会发现和之前一样,这里就需要介绍另外几个开发GUI界面的知识点了,首先,我们想要实现的功能是:当按下Send按钮时,文本框显示^_^Hello,World^_^字样,当按下Clear按钮时,文本框清空;这属于人机交互,一般人机交互的处理方式有两种,第一种是查询处理方式,比如在DOS系统下、Linux系统等命令行下的程序设计,第二种是事件处理机制,有了很多的优越性,由传统的查询法耗费CPU一直在检测,变成了事件处理机制下的主动提醒告知,大幅度减轻CPU资源浪费,在事件处理机制中有以下几个概念:

  事件源(EventSource):描述人机交互中事件的来源,通常是一些控件;

  事件(ActionEvent):事件源产生的交互内容,比如按下按钮;

  事件处理:这部分也在C++中被叫做回调函数,放事件发生时用来处理事件;

  注:这部分在单片机中也是如此,中断源产生中断,然后进入中断服务函数进行响应;

  清楚了这几个概念后,就来实现我们想要的功能,按下按钮是一个事件,那么,如何编写或者在哪编写这个事件的事件处理函数呢?在VS中很方便,只需要双击这个控件,VS就会自动将该控件的事件处理函数添加进Form1.cs文件,此处我先双击“Send”按钮,可以看到VS自动添加进了 private void button1_Click(object sender, EventArgs e) 这个方法,然后在里面编写代码,让文本框显示:这里所有的控件都是一个具体的对象,我们要通过这些对象设置其属性或者调用其方法;同样的道理,双击Clear按钮,添加文本框清空代码,完整代码如下:

//用户项目工程自定义命名空间HelloWorld
namespace HelloWorld
{
    //定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form
    //partial关键字
    public partial class Form1 : Form
    {
        //与类同名的构造方法
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //按下Send按钮
            textBox1.Text = "^_^Hello,World^_^";    //文本框显示
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //按下Clear按钮
            textBox1.Text = "";                      //文本框清空
        }
    }
}

  至此,大功告成,第一个应用程序创建成功,点击启动按钮看下效果:

原文地址:https://www.cnblogs.com/Mculover666/p/9126191.html

时间: 2024-08-04 15:40:21

C#上位机开发(二)的相关文章

C#学习与上位机开发之串口通信模块介绍

串口通信模块(SerialPort) (1)模块简介 使用此模块需要首先包含一些文件IO相关文件 using System.IO;using System.IO.Ports; 图标如下图1所示,将其拖拽到面板.会显示在最下方,其参数有如下: BaudRate 波特率 DataBits 数据位 Parity 奇偶校验位 PortName 端口号 StopBits 停止位 ByteToRead 获取输入缓冲区的 IsOpen 获取是否开启串口         以上是我们做串口通信上位机需要用到的(如

基于CAN总线的汽车诊断协议UDS(上位机开发驱动篇)

本篇作为UDS上位机的驱动开发篇,从市面上多见的CAN分析仪着手介绍UDS上位机驱动开发和移植的一般过程,目的是使UDS上位机软件能适应多家CAN分析仪,降低使用者的硬件成本. 一:广成CAN分析仪的驱动开发 首先创建ECANDLL类,从广成提供的二次开发包中获取ECANVCI.dll文件,将DLL文件放置与生成程序的目录中,如下类中创建了CAN常用的控制函数. public static class ECANDLL { [DllImport("ECANVCI.dll", EntryP

C#上位机开发(三)—— 构建SerialAssistant雏形

上一篇简单介绍了C#的一些基本知识,并成功的Hello,World,那么从这篇开始,我们来自己动手写一个串口助手: 1.构思功能 串口助手在单片机开发中经常被用来调试,最基本的功能就是接收功能和发送功能,其次,串口在打开前需要进行一些设置:串口列表选择.波特率.数据位.校验位.停止位,这样就有了一个基本的雏形:然后我们在此功能上添加:ASCII/HEX显示,发送,发送新行功能,重复自动发送功能,显示接收数据时间这几项扩展功能: 2.设计布局 根据以上功能,将整个界面分为两块:设置界面(不可缩放)

上位机配置管理一体化软件说明【持续更新】

为了更好地进行上位机开发,特意开发了一款上位机配置管理一体化软件,该软件集成配置.通信及上层接口为一体,统一进行多线程通信及数据解析,可以快速进行上位机开发,已实际运用在多个项目,并稳定运行超过1年时间. 功能如下: [1]上位机配置   [2]上位机通信 [3]上层接口 软件截图: 原文地址:https://www.cnblogs.com/xiketangedu/p/11721322.html

[自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇&#183;基于C#上位机软件开发

前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分展示 三.基于C#的客户端软件说明 3-1.整体框架介绍: 3-2.部分技术细节介绍 3-2-1.串口操作 3-2-2.JiSuan函数说明及核心算法介绍 四.阶段小结 五.相关链接 一.整体思路 >_<" 如下图,利用我们上三节开发的超声波发射与接收设备构成一个:2固定接收头+1可移动

基于uFUN开发板的心率计(三)Qt上位机的实现

前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值.这篇文章主要是介绍Qt上位机如何实现波形的显示,串口数据的解析,以及一些小细节实现.这篇文章写完,uFUN心率计这个小项目就算结束了,最近又做了个uFUN开发板的扩展板,在微信群里的朋友都已经看到了,后面会做一些好玩的东西,大家要保持关注哈! 关于Qt Qt是一个1991年由Qt Company开

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

VIP 视频开发板 上位机 测试软件 下载地址,玩转各自分辨率

本上位机最高测试帧率 133fps 目前支持分辨率:更多分辨率支持,敬请期待或给我留言VGA:640*4801.3M:1280*10242M:1600*1200786p:1024*768 格式兼容:1.兼容cb mini vip开发板2.usb2.0 摄像头评估板(30w-300w)3.VIP_V101 fpga 视频评估板4.线阵ccd 行显示 评估板 程序采用vs2008 mfc框架编制 如无法运行 请自行下载相关动态库 dll,或与我邮件联系最后更新日期:20150420 淘宝店铺:htt

FX2LP CY7C68013A上位机应用程序开发笔记

---恢复内容开始--- 现在CYPRESS官网给出最新的安装包的驱动信息是cyusb3.inf/cyusb3.sys,之前的cyusb.inf/cyusb.sys已经不再使用. 旧版本的安装包为:Cy SuiteUSB3.4.7,新版本的为:CY3684 EZ-USB FX2LP Development Kit (Rev. B)或者CY3684 EZ-USB FX2LP DVK Setup那我们只需要看装新版的开发套件即可. 为了紧跟时尚潮流我们采用了新的驱动,从官网下载下来的安装目录应该是这