C# 上位机实战开发指南 C# 上位机实战开发指南 1

Size: px
Start display at page:

Download "C# 上位机实战开发指南 C# 上位机实战开发指南 1"

Transcription

1 1

2 第一章 C# 和 Visual Stduio 1.1.NET 时代 在.NET 之前, 尤其是 20 世纪 90 年代,Windows 程序员几乎使用 VB,C 或者 C++ 部分 C 和 C++ 开发者使用纯 Win32 Api, 但是大多数人还是选择使用 MFC 这些语言开发难度较大, 底层代码复杂 21 世纪初期越来越多的开发者迫切需要一个安全, 集成度高, 面向对象的开发框架 2002 年, 微软如期发布了.NET 框架的第一个版本, 它具有如下几个特点 : 多平台可在任意计算机系统运行, 包括服务器, 台式机等 安全性提供更加安全的运行环境, 即使有来源可疑的代码存在 行业标准使用标准通信协议, 比如 HTTP,SOAP,JSON 等 在 2016 年最新一期的编程语言排行榜中 C#.NET 位列第四, 而且呈上升趋势 排行榜如图 1-1 所示 图 1-1: 编程语言排行榜 2

3 1.2 C# 的前世今生 C# 是微软发布的一种面向对象, 运行于.NET 之上的高级语言 也是微软近几年主推的开发语言, 可以说是微软.NET 框架的主角 只要具备一些 C 语言基础就可以非常迅速的入门 C# 开发, 这也是我极力推荐使用 C# 开发上位机的一个重要原因 1.3 难以置信的 Visual Studio 2015 Visual Studio 2015( 以下简称 VS2015) 是微软推出的开发环境,C# 也是基于此开发 相比较之前的版本,VS2015 具有更强大的调试功能, 甚至集成了安卓, IOS 等跨平台开发环境 作为一个强大的集成开发环境,VS2015 同时还能支持 STM32 单片机的编译 具体教程请参看 : 笔者认为 VS2015 是宇宙最强 IDE, 完虐我们常用的单片机开发环境如 KEIL, IAR 等 更多使用技巧就留给读者自己去发现吧 1.4 VS2015 的安装与使用 3

4 第二章 C# 语法基础 2.1 C# 编程概述 本章将为上位机开发打基础, 当然具有 C 语言或者单片机开发经验的同学也可以跳过本章, 直接进入第三章窗体程序的学习中 因为 C# 和 C 语言在语法上大致相同 本章只讲解一些与单片机 C 语言相差较大的部分, 其余不再过多讲解 代码分析也全部放在第三章以后 若想深入学习 C#, 请参考专业入门书籍, 推荐 C# 图解教程 ( 第四版 ) 2.2 命名空间 在 C# 中, 命名空间提供了一种组织相关类和其它类型的方式 我理解的命名空间就是一个集装箱, 里面可以装下很多类和方法 其实我们也可以认为所谓的命名空间相当于 C 语言中的头文件, 只不过 include 变为了 using namespace 具体的书写规范见代码清单 2-1 代码清单 2-1: 命名空间书写规范 1. using System; // 命名空间类似于头文件 2. using System.Collections.Generic; //using include; Systerm xxxx.h 3. using System.ComponentModel; 4. using System.Data; 5. using System.Drawing; 6. using System.Text; 7. using System.Windows.Forms; // 用户自定义命名空间, 相当于新定义一个头文件 10. // 一般情况下一个上位机工程对应一个新的命名空间 11. namespace Demo 12. { public partial class Form1 : Form 15. { 16. // 构造函数, 新建窗体工程时自动创建这段代码, 可先忽略 17. public Form1() 18. { 19. InitializeComponent(); 20. } 21. } 22. } 4

5 这段代码在新建工程之后由 VS2015 自动创建, 第 1 到 7 行代码全都为系统自带的命名空间 第 11 行为开发人员自定义的命名空间, 之后的每一个上位机项目都是一个自定义命名空间 大概了解了 C# 命名空间的书写格式规范后, 我们再简单回忆一下 C 语言中头文件的书写规范并比较二者的异同点,C 头文件书写格式见代码清单 2-2 代码清单 2-2:C 头文件书写规范 1. #ifndef USART_H 2. #define USART_H #include "stm32f10x.h" 6. #include "stdio.h" 7. #include "string.h" #define TxBuffSize #define Debug_ON #define DebugPutInfo(fmt,arg...) do{if(debug_on)printf(fmt,##arg);}while(0) void USART_Config(void); 20. void USART1_SendByte(uint8_t DataToSend); 21. void USART1_SendString(const char* StringToSend); 22. void USART1_SendBuff(uint8_t* DataToSend, uint8_t DataNum); #endif 通过代码清单 2-2 我们很容易发现,C# 的命名空间和 C 的头文件遵循一样的规则, 即要想使用某方法某函数则必须要包含方法所在的命名空间或者头文件 这是相同点 不同点则表现在 C 语言在声明了头文件和函数接口后必须要在对应的 C 文件中编写函数体后才可使用 C# 则将省去了函数声明, 直接即可编写对应的函数体 5

6 2.3 类 什么是类 在 C# 开发中, 类 (class) 至关重要 可以认为类是 C# 一个很大的主题 关于它的讨论将一直延续到本书结束 我们在单片机软件开发中设计数据结构时往往离不开先设计结构体, 其实类就相当于结构体, 这也是面向对象的一个前提条件 我们可以将类抽象成一个既能存储数据又能执行代码的数据结构 它包含数据成员和函数成员, 因此类对 C# 代码的封装起着举足轻重的作用 如何声明一个类 类的声明和结构体类似, 即定义了一个新类的成员和特征 但是它并不创建类的实例, 相当于结构体声明后并不分配内存, 只有在使用时声明后才会分配内存一样, 类的声明和实例化不可混淆 类的声明方式如代码清单 2-3 所示 代码清单 2-3: 类的声明方式 1. using System; // 命名空间类似于头文件 2. using System.Collections.Generic; //using include; Systerm xxxx.h 3. using System.ComponentModel; 4. using System.Data; 5. using System.Drawing; 6. using System.Text; 7. using System.Windows.Forms; // 用户自定义命名空间, 相当于新定义一个头文件 10. // 一般情况下一个上位机工程对应一个新的命名空间 11. namespace Demo 12. { public partial class Form1 : Form 15. { 16. // 构造函数, 新建窗体工程时自动创建, 可先忽略 17. public Form1() 18. { 19. InitializeComponent(); 20. } // 类的声明方式 23. class MyClass 24. { 25. // 成员声明

7 26. //class 为类的关键字,MyClass 为类名 27. } 28. } 29. } 从代码清单 2-3 可以清晰看出, 类的声明非常简单 其中类的成员可以是变量, 也可以是函数方法 2.4 Main: 程序由你开始 每一个 C# 程序都必须有一个类带有 Main 函数 ( 方法 ), 它是程序的开始, 它通常被声明在 Program 类中 这就好比我们在开发单片机时喜欢将 main 函数声明在 main.c 中一样 通常 Program.cs 文件随工程一起创建, 详细代码见图 2-1 图 2-1:Main 方法 从图中我们清晰的看到了 Class 关键字, 其实 Program.cs 本身就是一个类文件 2.5 变量与常量 值类型与引用类型 值类型和我们单片机开发中的数据类型类似, 需要一段独立内存存放它的实际数据 如果值类型变量定义在方法 ( 函数 ) 内部那么在调用结束后这片内存回收 相反如果定义为全局, 那这片内存则不会被回收 这和 C 基本一样 char,int float,enum,struct 等都是值类型 7

8 引用类型是一个特殊的类型, 它的存储需要两片内存 实例数据存放在堆中, 引用存放在栈中, 引用可以理解为指针 具体引用类型为什么需要两片内存不再做任何讨论, 我们只需要知道引用类型的使用和常规的值类型有什么区别就行 C 语言中如果我们表示一段字符串可以定义一个指针, 在 C# 中直接使用 string 关键字即可定义 string 便是一个非常典型的引用类型, 它不遵循值类型的规则 当我们定义一个 string 类型变量并且第一次赋值时假设它在地址 0x 中, 那么在第二次赋值再次查看内存时, 它已经不在上一次地址中, 即引用类型每次在使用后都会变更内存地址 引用类型在并行多线程的使用中尤为重要 当然, 在上位机开发中我们可以将引用类型当作一般类型来使用 声明变量 C# 声明变量和 C 语言相同, 声明过程完成两件事 给变量命名, 并且关联一种类型 编译器为其分配一片内存 变量的作用域 类中的变量作用域就在类中, 类被回收, 变量即被回收 方法 ( 函数 ) 内部变量作用域为整个方法体 其中如果变量是某循环某判断中定义的, 作用域就在循环或者判断体内 访问修饰符 代码清单 2-3 中类的声明在 class 前未添加任何访问修饰符,C# 规定无访问修饰符的情况下类成员即为隐式私有, 外部不可访问 C# 常用的访问修饰符有以下 5 个 私有的 :private 公开的 :public 受保护的 :protected 内部的 :internal 受保护内部的 :protected internal 顾名思义,private 私有即外部不可访问, 只能在类的内部使用, 而 public 修饰的变量则可以在类的外部访问 关于 private 和 public 以及变量在类中的使用查看代码清单 2-4 代码清单 2-4: 访问修饰符及变量在类中的简单使用 1. using System; // 命名空间类似于头文件 2. using System.Collections.Generic; //using include; Systerm xxxx.h 8

9 3. using System.ComponentModel; 4. using System.Data; 5. using System.Drawing; 6. using System.Text; 7. using System.Windows.Forms; // 用户自定义命名空间, 相当于新定义一个头文件 10. // 一般情况下一个上位机工程对应一个新的命名空间 11. namespace Demo 12. { 13. public partial class Form1 : Form 14. { 15. // 构造函数, 新建窗体工程时自动创建, 可先忽略 16. public Form1() 17. { 18. InitializeComponent(); 19. } int data0 = 0; // 全局变量声明, 变量声明后即可在方法中使用 22. // 与 C 语言相同 // 类的声明方式 26. class MyClass 27. { 28. // 成员声明 //class 为类的关键字,MyClass 为类名 int data1 = 0; // 无修饰符默认隐式私有 32. // 外部不可访问 public int data2 = 0;// 公有, 外部可访问 35. } 36. } 37. } 从代码清单 2-4 可看出类 MyClass 中 data2 添加了修饰符 public, 因此它可以在类的外部被调用 9

10 2.6 多线程的使用 线程概述 相信大家在嵌入式 RTOS 中就已经接触过多线程 ( 多任务 ) 的处理机制 同样在多线程的使用下 C# 便可以并行执行代码 注意, 这里的并行并不是真正意义上的同时执行, 只是任务上下文切换速度极快, 给人的感觉好像是在并行 一个 C# 程序开始于一个单线程 (Main 方法入口 ), 这个线程是由操作系统自动创建的, 我们也称之为主线程或者 UI 线程 同时主线程下可以创建多个子线程 何时使用多线程 多线程一般情况下用在后台处理耗时任务, 主线程保持执行 对于 Winform 来讲, 如果所有耗时任务都放在主线程执行, 那就会带来鼠标键盘等响应迟钝现象 为了避免这个现象, 我们可以在主线程中再创建一个子线程, 这样就避免了阻塞主线程, 导致 UI 响应迟钝的现象 一个优秀的交互软件必定会有多线程的使用 多线程的优缺点 在多线程的帮助下, 我们可以快速的实现异步操作, 这使得软件的 UI 可以迅速响应, 给客户一个极佳的 UI 体验 无论我们是否使用过 RTOS, 但 STM32 中的 DMA 我相信大家使用的非常之多,DMA 在进行内存拷贝传输时完全不需要 CPU 干预, 由此我们完全可以理解为 DMA 是一个全硬件实现的子线程 当然多线程并非全无缺点, 最大的问题便是加大了代码的复杂性 当然多线程本身非常简单, 但线程间的交互却非常复杂, 使用不当甚至会带来间歇性或重复性的 BUG 同时多线程无意间又增加了 CPU 资源的消耗 多线程的简单使用 一般情况下上位机多线程都使用局部线程, 它和局部变量类似, 用时创建, 用完销毁 全局线程在上位机开发当中使用的相对比较少 当然全局也可以使用但必须要自己实现挂起和恢复函数, 系统自带的接口函数已经过时, 容易造成阻塞, 实际开发中我们也几乎很少用到全局线程 因此我将只介绍局部线程的使用方法 局部线程存在于方法中, 像局部变量一样使用, 具体介绍请看代码清单 2-5 代码清单 2-5: 局部线程的使用 1. using System; // 命名空间类似于头文件 2. using System.Collections.Generic; //using include; Systerm xxxx.h 3. using System.ComponentModel; 10

11 4. using System.Data; 5. using System.Drawing; 6. using System.Text; 7. using System.Threading; 8. using System.Windows.Forms; // 用户自定义命名空间, 相当于新定义一个头文件 11. // 一般情况下一个上位机工程对应一个新的命名空间 12. namespace Demo 13. { 14. public partial class Form1 : Form 15. { 16. // 新建窗体工程时自动创建这段代码, 可先忽略 17. public Form1() 18. { 19. InitializeComponent(); 20. } int data0 = 0; // 全局变量声明, 变量声明后即可在方法中使用 23. // 与 C 语言相同 // 类的声明方式 27. class MyClass 28. { 29. // 成员声明 //class 为类的关键字,MyClass 为类名 int data1 = 0; // 无修饰符默认隐式私有 33. // 外部不可访问 public int data2 = 0;// 公有, 外部可访问 36. } /// <summary> 39. /// 多线程的使用 40. /// </summary> 41. public void ThreadTest() 42. { 43. new Thread(() => 44. { 45. /// 46. /// 添加自定义代码 47. /// 例如线程内部运行函数方法 :xxxxx 11

12 48. /// xxxxx(); 49. }) 50. { IsBackground = true, Name = " 多线程的使用 " }.Start(); 51. } 52. } 53. } 从代码清单 2-5 中我们看到函数 ThreadTest, 内部就是一个局部子线程的写法 其中 IsBackgroud = true 是将该线程设置为了后台线程 后台线程的作用主要在于当上位机程序关闭时线程也自动随窗体一起销毁了, 如果不设置为后台线程窗体关闭时线程依然在消耗着 CPU 因此使用时切记一定要将后台属性设置为 true Name 即线程的名字, 注意区分的作用, 没有什么好讲, 写与不写没有区别 Start 即启动线程的接口函数, 运行后就将执行线程内部的方法 内部函数执行完线程销毁 注意局部线程和全局线程只是个人的称呼, 在 C# 中并没有严格的定义来区分这两种线程, 我们会用即可 2.7 异常处理 异常概述 见名知意, 异常就是软件在运行中所发生的错误 比如上位机串口未打开就调用了发送方法, 此时系统就会捕获到这个错误, 并抛出一个异常 如果软件设计时没有提供一个异常处理的方法, 则系统自动将软件挂起 通常我们在调用串口发送方法前都会判断是否开启串口或者嵌套 try...catch 语句来捕获异常防止软件被系统挂起 try...catch 语句 try 语句用来指明为避免异常而被保护的代码段, 并在发生异常时提供处理代码 一般情况下我们使用 try...catch 组合语句来保护关键性代码 具体使用实例在上位机实战章节具体介绍 2.8 属性和方法 什么是属性 在本章第二小节中我们简要的接触了类的概念, 类相当于一个结构体但不能等价于一个结构体, 因为类是具有属性的, 而结构体没有 在结构体内部定义一 12

13 个缓冲区, 这个缓冲区的大小必须在程序编译前确定下来, 运行中不可改变 但类通过属性却可以修改这个缓冲区的大小 那么什么是属性呢? 属性就好比一个人的发色, 生来黑色, 但不会永远是黑色, 我们可以随意染成红蓝紫色 也就是说属性是一个类的动态特性, 比如上位机在运行过程中我们可以随时修改波特率 属性的优点 上一节中我们提到上位机的波特率可以在运行过程中任意修改, 这就是属性的一个优点 当然属性也对类内部的私有变量提供了一种保护机制 要想修改类内部私有变量值就必须通过属性来操作 这就好比去银行存钱我们无法进入金库, 只能通过 ATM 机是一样的 属性的使用介绍 属性一般情况下可直接在控件属性栏中设置, 也可通过代码设置 上位机开发中一般都是使用系统自带的类库, 很少会自己编写类库以及属性 因此本节就不再介绍如何写声明属性, 在具体讲到控件使用时再介绍属性的妙用 什么是方法 C# 中的方法类似于 C 语言函数, 只是 C# 赋予了方法属性, 方法既可以是私有的, 又可以是共用的 谈及私有方法, 其实我们完全可以将它理解为 C 语言函数套了一个 static 关键字, 代表这是单文件中使用的 2.9 委托和事件 什么是委托 委托可以说是 C# 第一个要跨过去的坎儿, 理解难度比较大 但我会在接下来的上位机实战章节中具体介绍学习的每一步, 在本章就做一个简要的介绍 我非常喜欢将委托比喻成 C 语言中的函数指针数组, 我们知道函数指针的存在极大的方便了我们设计单片机软件架构, 事件回调机制等封装技术都基于函数指针实现 无独有偶, 在 C# 中事件回调机制也是通过委托实现, 所以我一直认为软件思想都是相通的, 只是表现形式上换了一个说法而已 对我们单片机出身的软件开发人员来讲, 理解起委托易如反掌, 因为我们已经在底层深耕多年 那么 C# 如何定义委托呢? 可以认为委托是持有一个或者多个方法的对象 委托和类一样, 是一种用户自定义类型, 不同在类是数据和方法的集合 执行委托即执行了委托中所有的方法 13

14 2.9.2 什么是事件 学习 STM32 之时, 我们已经接触过事件的概念 事件是由硬件实现, 可触发中断以及关联性操作, 如 ADC,DMA 等 它和中断最大的区别在于事件无需返回, 而中断需要返回 事件不仅在 MCU 硬件中大量使用, 同时又与单片机软件架构设计息息相关 所有的 PC 端程序都需要在某个特定的时刻响应某个操作, 处理某件事情, 比如响应鼠标单击事件, 键盘事件等, 因此 C# 也引入了事件触发机制 在上一节的内容中我们简要介绍了委托, 事件本质上源于委托, 是一种特殊的委托, 它为委托提供了封装性, 一方面允许从类的外部增删绑定方法, 另一方面又严禁从类的外部触发委托所绑定的方法 我们的目的是快速开发上位机, 因此在使用过程中完全可以将事件理解为中断, 事件回调函数就是我们常说的中断服务函数 同时一般情况下我们也不需要自己封装事件, 调用控件已经封装好的事件函数即可 因此本章就不再做过多的代码实例讲解, 事件的使用以及注意点将在上位机实战章节中做具体的介绍 14

15 第三章 Windows 窗体程序 3.1 第一个窗体程序 新建本地工程文件夹 为了使工程易于管理, 我们首先在电脑本地新建一个文件夹用于存放整个共工程, 比如命名为 DEMO 注意文件夹名虽然根据喜好命名, 但最好不要使用中文命名, 因为有时候如果上位机需要加载本地文件遇到中文名必须要转码, 比如加载本地 URL 时路径存在中文就相对麻烦, 因此我建议使用英文命名 新建工程 启动 VS2015, 新建一个工程, 如图 3-1 所示 图 3-1: 在 VS2015 中新建工程 1. 选择.NET 版本 通常我们可以选择.NET2.0 或者.NET4.0,.NET3.x 版本兼容性差,BUG 较多, 几乎没有人使用,.NET4.5 以上版本太高, 不再支持 Windows XP 一般情况下,Windows XP 已经很少使用.NET4.0, 而.NET2.0 可以流畅的在 Windows XP 及其以上版本系统上运行, 即使在企业级开发中 4.0 也已经算非常高的版本了, 因此出于兼容性的考虑, 建议选择.NET2.0 进行开发 当然在讲到波形绘制项目时, 我们会优先选择.NET4.0 15

16 2. 选择项目类别 上位机开发选择 Windows 窗体应用程序 3. 命名项目名 建议使用英文名命名, 避免路径中出现中文, 这里我取名 Demo 图 3-2: 创建项目 我们将新建的工程放置于 DEMO 文件夹中即可 此时 VS2015 切换至窗体设计器界面 4. 控件及属性栏介绍 Windows 窗体程序离不开控件的使用, 在新建好工程后我们就需要找到 Windows 原生的控件库 在界面左边的工具箱中就存放着所有我们可能会用到的 Windows 原生控件 一般情况工具箱会自动隐藏, 考虑到设计界面时我们需要比较大的空间去揣摩界面设计思路, 因此建议使用时都将工具箱隐藏, 用到时再选择控件即可 当然出于个人喜好又或者开发电脑有一个非常大的屏幕, 我们也可以将工具栏显示在设计器界面中 属性栏一般在界面右下角, 使用频率非常高, 控件样式, 事件的注册等都需要在属性一栏中进行设置 16

17 右上角解决方案管理器是整个工程文件的结构脉络 设计器界面如图 3-3 所示 控件库界面如图 3-4 所示 图 3-3: 设计器界面 项目代码区 图 3-4: 控件栏 在解决方案管理器中选中 Form1.cs 文件右击出现查看代码选项, 单击即可进入窗体代码区 同时资源管理器中还有 Program.cs 文件, 在第二章我们已经大概了解了 17

18 Program.cs 的代码结构 通常我们几乎不会去修改 Program.cs 文件中的代码, 所以我们暂时忽略 一般上位机代码的主体全部在 Form1.cs 文件中 我们在第二章分析命名空间时已经查看了相关代码 查看代码步骤以及窗体代码如图 3-5,3-6 所示 图 3-5: 查看步骤 图 :3-6: 窗体代码 调试窗体程序 VS2015 的调试功能非常强大, 我们经常用到的并不会太多, 和单片机在线仿真类似, 通常使用打断点单步调试, 查看变量值, 调用堆栈等功能 当然我们也可以实时查看 CPU 的使用率, 每一句代码所运行的时间, 这些可 18

19 以方便我们优化代码结构以及算法 图 3-7: 启动调试 当按下启动调试后窗体程序也就弹出, 此时即可打断点调试 最终的软件则在 Debug 文件夹中生成 图 3-8:exe 生成目录 3.2 Windows 控件简述 控件概述 在学习 emwin 时我们已经接触过控件的概念, 控件是用户可以操作的窗体内部对象 我非常喜欢将控件比喻成电子元器件, 窗体比喻成 PCB 板框, 那么此时程序代码自然也就等价于布线 我们完全可以将上位机的开发过程当作一次 PCB 板的设计过程 添加控件 我们可以通过三种方式添加控件至窗体, 这三种方式分别是 在窗体绘制, 拖动至窗体, 程序添加 这三种方式是等效的, 我们最常使用第二种方 19

20 式, 傻瓜式操作, 直接在工具箱选中控件然后拖动到窗体内部即可 3.3 常用控件的使用方法 文本标签控件 (Label) Label 控件主要用于显示一些不能编辑的文本, 文本的显示本质上是修改了 Label 的 Text 属性, 例如我们需要上位机实时显示下位机传来的温度数据, 那么只要将温度值转换为字符串格式赋值给 Label 的 Text 属性即可 下面详细介绍 Label 控件的基本使用方法 1. 设置标签文本 我们可以通过 2 种方式设置 Label 控件的显示文本 : 第一种是直接在属性面板中设置 Text 属性, 第二种是通过代码设置 Text 属性 属性面板设置我们从工具箱中将 Label 控件拖至窗体中, 选中 Label 控件后在属性面板中找到 Text 属性输入你要显示的文本, 比如 操作流程如图 3-9 所示 图 3-9: 属性面板设置 Label 属性 代码设置通常固定不变的文本我们在属性面板中设置一次即可, 但如果是实时动态刷新的数据则需要通过代码设置修改 代码清单如 3-1 所示 代码 3-1: 代码设置 Label 的 Text 属性 1. label1.text = " "; // 代码设置 Text 属性 20

21 在第二章介绍类时我们已经了解到类就相当于结构体, 通过代码清单 3-1 可以看出访问类的内部成员和结构体一样都是通过. 来访问 注意 C# 对类内部成员的访问不可以使用 -> 2. 修改 Label 文本字体大小以及颜色 通常为了字体美观, 我们会放弃默认字体显示格式, 重新设置新的显示样式 同样颜色和字体也有 2 种方式修改 : 第一种在属性面板直接修改, 第二种通过代码修改 一般颜色和字体样式决定后就不再变, 因此我们大多数都是在属性面板中一次设置成功 设置方法同设置 Text 文本属性一致 选中 Label 后在属性面板中找到属性 Font 即可修改字体大小以及风格等 找到 ForeColor 即可修改 Label 文本的显示颜色 如图 3-10 所示 按钮控件 (Button) 图 3-10: 文本样式设置 按钮 Button 控件的用法非常简单, 和 Label 一样文本样式都可以被修改, 这里便不再对文本样式做过多介绍 我们使用过的上位机中按钮 Button 通常用作打开或者关闭串口, 又或者清空缓存, 清空计数等, 这都由于 Button 可以触发 Click 事件 那么我们如何为 Button 绑定 Click 事件呢? 通常我们将 Button 拖至窗体中布好局后双击 Button 就可以自动注册 Click 单击事件, 同时 VS2015 自动跳至 Click 事件的函数体内 在上一节中我们已经学会了 Label 的使用方法, 现在利用按钮 Button 来修改 label1 的显示文本 label1 的默认文本为 :, 由 Button 触发 Click 事件修改其文本为 : Button1_Click 事件成功触发 我们先将 Button 拖至窗体并为其注册 Click 事件 ( 注册方式请看上文 ) 21

22 最后我们在 Click 事件回调函数内书写代码修改 label1 的 Text 属性 完整代码请看代码清单 3-2:Button 单击 Click 事件 代码清单 3-2:Button 单击 Click 事件 1. private void button1_click(object sender, EventArgs e) 2. { 3. label1.text = "Button1_Click 事件成功触发 "; 4. } 注意此函数为注册后自动生成的, 而不是手动输入, 只有函数体内部修改文本语句为手动添加的 文本框控件 (TextBox) 上位机通常都会有 2 个文本框, 一个用作接收区, 一个用作发送区 顾名思义他们的作用也就是用于显示文本的 不同于 Label 控件,TextBox 允许运行中由用户修改即我们可以随时通过键盘增删文本内容 默认情况下,TextBox 只单行显示, 如果将属性 Multiline 设置为 ture, 那么此时 TextBox 便支持多行显示 TextBox 的方法中最常用的是 AppendText 方法, 它的作用是将新的文本数据从末尾处追加至 TextBox 中 当 TextBox 一直追加文本后就会带来本身长度不够无法显示全部文本的问题, 此时我们需要使能 TextBox 的纵向滚动条来跟踪显示最新文本, 所以我们将属性 ScrollBars 的值设置为 :Vertical 即可 紧接着上一个案例, 我们再为窗体添加一个 TextBox 控件, 设置 Multiline 属性为 true, 并将滚动条设置为纵向滚动 同时在 button1 的单击事件中往 TextBox 追加文本 : \r\n 详细代码见代码清单 3-3 代码清单 3-3:TextBox 追加文本案例 1. private void button1_click(object sender, EventArgs e) 2. { 3. label1.text = "Button1_Click 事件成功触发 "; 4. textbox1.appendtext(" \r\n"); 5. } 运行效果如图 3-11 所示 22

23 图 3-11:TextBox 追加文本 下拉组合框控件 (ComboBox) 下拉组合框控件通常用于选择串口号, 波特率等功能, 它由 2 部分组成, 第一部分是允许用户输入修改的文本框, 第二部分是列表框, 它提供给用户有限的选择项 通常 ComboBox 也有两种使用模式, 一种是 DropDown, 这种模式下用户既可以在下拉列表中选择所需要的选择项, 又可以在列表没有所需选择项的情况下手动输入, 例如某上位机的波特率选择列表框只有 9600 一项, 此时只要 ComboBox 工作在 DropDown 模式下就可以输入任意你想要的波特率 那么相反另一种 DropDownList 模式则受到限制, 无法手动输入新的选择项 设置 ComboBox 的属性 DropDownStyle 便可以切换 ComboBox 的下拉模式 那么如何为 ComboBox 添加下拉选项呢?C# 为我们提供了两个方法, 第一种是单个添加的方法, 第二种是批量添加的方法, 下面详细介绍这两种方法 单个添加单个添加方法操作简单, 直接传入字符串即可, 同样我们紧接着之前的案例使用按钮 button1 的 Click 事件进行添加单个下拉选项, 代码清单如下 代码清单 3-4:ComboBox 单个添加下拉选项 1. private void button1_click(object sender, EventArgs e) 2. { 3. combobox1.items.add(" 下拉选项 1"); 4. combobox1.items.add(" 下拉选项 2"); 5. } 23

24 批量添加批量添加时首先要定义好一个字符串数组, 然后将数组名传入即可完成批量添加 通常上位机在启动时会获取当前电脑中所有的串口, 然后将串口号缓存至定义的字符串数组中, 最后批量传入 ComboBox 使用方法见代码清单 3-5 代码清单 3-5:ComboBox 批量添加 1. private void button1_click(object sender, EventArgs e) 2. { 3. // 单个添加 4. combobox1.items.add(" 下拉选项 1"); 5. combobox1.items.add(" 下拉选项 2"); // 批量添加 8. string[] Com = new string[3]; //C# 数组定义方式 9. Com[0] = " 下拉选项 3"; 10. Com[1] = " 下拉选项 4"; 11. Com[2] = " 下拉选项 5"; 12. combobox1.items.addrange(com); // 批量导入 13. } 在代码清单中我们看到一个全新的字符串数组定义方式, 其中 new 就是实例化, 也就是实际要分配内存的, 当然 new 的使用方法还有很多, 但上位机使用不多, 因此这里便不再做过多讲解, 请读者自行百度 效果图如下图所示 图 3-12:ComboBox 下拉选择项添加 24

25 3.3.5 复选框控件 (CheckBox) 复选框控件一般用于使能或失能某项功能, 比如上位机是否开启时间戳显示功能 通常我们会为 CheckBox 注册一个 Click 或者 Mouse_UP 事件, 注册方式我们采用在属性面板注册的方式, 这里为 CheckBox 注册一个 Click 事件 注册步骤如下图所示 图 3-13:CheckBox 事件注册 选中文本框区域后鼠标双击即可注册好 Click 事件, 同时 VS2015 自动跳转至事件回调函数内部 事件注册好后如下图所示 图 3-14:Click 事件成功注册 单击事件注册好之后我们就可以在 CheckBox1_Click 事件回调函数体内对 CheckBox1 的选中状态进行读取判断即判断 CheckBox 的 Checked 属性, 如果复选框被选中则 Checked 的值为 true, 那么相反复选框未被选中则 Checked 的值为 false 注意默认情况下 Checked 的值为 false, 因此当我们将复选框拖进窗体时默认未被选中 C 复选框 CheckBox 的 Checked 属性设置方式如图 3-15 所示 25

26 图 3-15:Checked 属性 紧接着上一个案例, 我们将 CheckBox 拖入窗体中并为其注册单击 Click 事件, 然后对选中状态进行判断并弹窗提示 详细代码见代码清单 3-6 代码清单 3-6:CheckBox 使用方式 1. private void checkbox1_click(object sender, EventArgs e) 2. { 3. // 如果 CheckBox 被选中 4. if (checkbox1.checked) 5. { 6. MessageBox.Show(" 选中 ");// 消息提示框, 用于调试 7. // 也可标志位置位 8. } 9. if (!checkbox1.checked) 10. { 11. MessageBox.Show(" 未选中 ");// 消息提示框, 用于调试 12. } 13. } 在代码清单中, 我们可以看到 MessageBox 的使用,MessageBox 主要用于打印一些调试信息或者一些异常信息, 我们可以将 MessageBox 理解为串口打印调试 调用 Show 方法传入要显示的字符串即可 当然 MessageBox 有很多的重载参数, 我们只要传入一个调试信息就足够了 代码运行效果如图 3-16 所示 26

27 图 3-16:CheckBox 被选中 单选按钮控件 (RadioButton) RadioButton 单选按钮控件使用方式和 CheckBox 类似, 但 CheckBox 允许多个进行复选, 每个控件之间不存在互斥关系 而 RadioButton 则不允许多选, 当用户选中其中某一个后, 其它几个的选中状态便全部为 false 比如上位机串口接收方式,16 进制和字符串便不能同时存在, 同一时间只能存在一种接收方式, 这种情况下就不适合使用 CheckBox, 只有 RadioButton 具有互斥关系, 因此我们通常使用 RadioButton RadioButton 控件如图 3-16 所示 图 3-16:RadioButton 注意 RadioButton 并不是所有的都会互斥, 只有在同一容器下才会互斥 因此 RadioButton 在使用时都要进行分组分容器 一般情况下我们会使用 Panel 容器控件进行分组 27

28 3.3.7 容器控件 (Panel) 容器控件主要用于为其它控件提供一个可识别的分组, 比如上一节中我们讲到的 RadioButton 单选按钮控件 Panel 就好比商场中的楼层,1 楼卖化妆品,2 楼卖电子产品一样 在将 Panel 拖进窗体中时选中区域外会有一个虚线框包围, 但在窗体运行后虚线框消失 Panel 控件如图 3-17 所示 图 3-17:Panel 控件 如上图所示虚线框即为 Panel, 每个 Panel 都包围了 4 个 RadioButton 控件, 因此在这种情况下只有 Panel 内部的单选按钮互斥 定时器控件 (Timer) 严格来说 Timer 是一个组件并不能算作是控件, 因为控件是可视的, 能在窗体中看到这个控件的样式, 而组件不行, 组件不需要绘制, 不能在窗体中显示出来 因此我们可以将组件理解为一个抽象的控件 添加 Timer 控件的方式和普通控件一致, 只是添加后控件出现在设计器下方, 如图 3-18 所示 图 3-18:Timer 定时器控件 既然 Timer 是定时器, 那就有一个定时的时长, 通过设置 Timer 的 Interval 属性就可以设置定时的时长 注意 Interval 的单位是毫秒 (ms), 默认为 100 毫 28

29 秒触发一次 Tick 事件 启动定时器使用 Start 方法, 停止定时器使用 Stop 方法 定时器使用方式基本和单片机的定时器类似 我们使用一个 button 作为定时器 timer1 的开关, 并通过属性面板为该 butoon 的 Text 属性设置为 开始, 当启动定时器后将 Text 属性改为 停止, 并在 Tick 事件中定时改变 label2 的文本来验证 Timer 的使用方式 我们在属性面板中设置定时周期为 1 秒, 并为其注册 Tick 事件, 并且同时为 button2 注册 Click 事件 代码见清单 3-7 代码清单 3-7: 定时器的使用 1. int Cnt = 0; // 全局变量, 用于计时显示 2. private void timer1_tick(object sender, EventArgs e) 3. { 4. Cnt++; 5. label2.text = Cnt.ToString(); 6. //ToString 是将实际数值变为字符串形式的方法 7. // 等价于单片机中加上 :0x30 8. } private void button2_click(object sender, EventArgs e) 11. { 12. if (button2.text == " 开始 ") 13. { 14. timer1.start(); // 开启定时器 15. button2.text = " 停止 "; 16. } 17. else 18. { 19. if (button2.text == " 停止 ") 20. { 21. timer1.stop(); // 停止定时器 22. button2.text = " 开始 "; 23. } 24. } 25. } 代码中 ToString 方法用于将数字变为字符串, 比如上位机获取到传感器数据如果要显示在 Label 标签上则必须要使用 ToString 方法 除非协议中传感器的数据已经是字符串格式, 当然一般数传协议很少会使用这种方式 ToString 方法还可以格式化输出字符串只需要在括号中填入参数 整段代码逻辑非常清晰, 易于理解 Timer 在上位机中可以用于定时发送功能的实现, 也可以用作超时处理机制的实现 button2_click 事件内部用于开关定时器, 通过按钮的文本来选择何时打开定时器, 何时关闭定时器 代码运行效果如图 3-19 所示 29

30 图 3-19:Timer 运行效果 图中 Label2 在 Tick 事件下每秒自增 串口控件 (SerialPort) 串口控件和定时器一样, 不需要绘制, 因此无法将其添加至窗体中, 只能和定时器一样显示在设计器下方, 如图 3-20 所示 图 3-20: 添加串口控件 串口常用的属性有 2 个, 一个是端口号 (PortName), 一个是波特率 (BaudRate), 其它停止位, 校验位等默认即可 串口打开与关闭都有接口可以直接调用 串口同时还有一个 IsOpen 属性,IsOpen 为 true 则表示串口已经打开, IsOpen 为 false 则表示串口已经关闭 串口控件的使用是整个上位机开发的基础, 因此在接下来的几个小结我将详细介绍串口控件的使用方法 下面我从两个方面开始介绍 1. 串口发送 串口发送方法也有 2 种, 一种是字符串发送 WriteLine, 一种是 16 进制发送, 30

31 Write 其中字符串发送 WriteLine 默认已经在末尾添加换行符 串口开关发送示例见代码清单 3-8 代码清单 3-8: 串口开关发送 1. byte[] SendByte = new byte[5];// 数组定义 2. SendByte[0] = 1; 3. SendByte[1] = 2; 4. SendByte[2] = 3; 5. SendByte[3] = 4; 6. SendByte[4] = 5; 7. serialport1.open(); // 打开串口 8. serialport1.close(); // 关闭串口 9. serialport1.write(sendbyte, 0, 5);// 发送 16 进制 10. serialport1.writeline(" 字符串发送 ");// 字符串发送 其中字符串发送直接传入要发送的字符串即可, 最终发出去的自带换行符 16 进制发送一共有 3 个参数, 第一个参数是要发送的缓存也就是数组名, 第二个是偏移量即从缓存中第几个字节开始发送, 第三个是发送的字节数 2. 串口接收 使用串口接收之前先要为串口控件注册一个 Receive 事件, 作用等价于串口接收中断 然后在中断内部对缓冲区的数据进行读取 串口接收与发送相同都有 2 种方法, 一个是 16 进制方式读, 一个是字符串方式读 首先我们先注册串口接收事件, 如图 3-21 所示 图 3-21: 串口接收事件注册 在注册好后接收事件之后, 我们即可在事件中读取缓冲区中的数据, 见代码清单 3-9 代码清单 3-9: 串口数据读取 1. // 串口接收事件, 相当于单片机串口接收中断 2. private void serialport1_datareceived(object sender, System.IO.Ports.SerialD atareceivedeventargs e) 3. { 4. // 字符串方式读 5. string str = serialport1.readexisting();// 字符串方式读 6. //16 进制读 31

32 7. int n = serialport1.bytestoread; // 获取缓冲区中的字节数 8. byte[] Buf = new byte[n]; // 定义一个以有效字节数为大小的缓存 9. serialport1.read(buf, 0, n); // 读取至缓存 10. } 其中定义有效字节数为大小的缓存相当于动态分配, 非常方便 Read 方法有三个参数, 第一个是缓存数组, 第二个是偏移量, 第三个是写入字节数 通常从缓存头开始一直写满为止 Windows 常用控件使用总结 Windows 原生控件的使用非常简单, 上位机开发所涉及到的控件并不多, 所谓熟能生巧, 在多次使用之后便会非常熟悉 关于其它未曾讲解的控件, 读者可以自行百度学习, 或者去 MSDN 官网学习 在对某个控件或者对某个方法的使用不熟悉时可在代码区选中它, 按下 F1, 浏览器将自动跳转至微软官方的学习介绍网页 注意在使用 Button 等可以添加 Click 事件的控件时, 一般我们都使用 MouseUp 鼠标弹起事件来代替 Click 事件, 因为 Click 事件的触发条件比较特殊, 而鼠标弹起则每次都会触发 32

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

C#程序设计实验

C#程序设计实验 程序设计基础 实验指导 / 实验一 : 认识 C# 1 程序设计基础 实验指导 实验一 : 认识 C# 一 实验目的 1 掌握 Visual Studio 的基本操作方法, 学会使用该编译工具 2 掌握编辑 编译 运行控制台应用程序的基本过程 3 掌握建立 Windows 窗体应用程序的基本过程 4 通过运行 C# 程序, 初步了解 C# 程序的特点 二 实验学时 2 学时 三 实验类型 验证性实验

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f Web Chapter 22 SharePoint Web Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web 21 22-1 SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f Views.asmx View SharePoint

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

IsPostBack 2

IsPostBack 2 5 IsPostBack 2 TextBox 3 TextBox TextBox 4 TextBox TextBox 1 2 5 TextBox Columns MaxLength ReadOnly Rows Text TextMode TextMode MultiLine TextMode MultiLine True False TextMode MultiLine Password MulitLine

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

untitled

untitled Inside ASP.NET 2.0- ASP.NET 1.1 2. 理念 讀 了 了 度 讀 了 理 類 來 來說 流 了 來 來 來 來 理 來 不 讀 不 不 力 來參 流 讀 了 異 行 來了 錄 行 不 了 來 了 來 行 論說 了 更 不 例 來了 力 行 樂 不 說 兩 例 利 來 了 來 樂 了 了 令 讀 來 不 不 來 了 不 旅行 令 錄 錄 來 了 例 來 利 來 ManagerProvide

More information

untitled

untitled 1 MessageBox 類 MessageBox 類 Show Show (,,, ); Show (string, string, MessageBoxButtons, MessageBoxIcon) MessageBox 類 列 數 MessageBoxButtons.OK MessageBoxButtons.OKCancel MessageBoxButtons.AbortRetryIgnore

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探 付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探索建设中 成时间 : 2017-07-20 12:13:21 Since 8.6 定义键盘 定义键盘使

More information

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech - OfficeCoder 1 2 3 4 1,2,3,4 xingjiarong@mail.sdu.edu.cn 1 xuchongyang@mail.sdu.edu.cn 2 sun.mc@outlook.com 3 luoyuanhang@mail.sdu.edu.cn 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,

More information

* 4 6 R P r p . 1 2 3 4 7 89bk 6 5 1 2 3 4 5 6 7 8 9 0 bk r bl bm bn^ bo bl br bq bpbo bn bm [ ] [ ] [ ] bp 8 2 4 6 bq p [ ] [SET] br clckbt bs bs bt ck cl. 1 2 1 2+- 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

untitled

untitled 1 .NET sln csproj dll cs aspx 說 料 料 利 來 料 ( 來 ) 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Click 滑 料 Response 列 料 Response HttpResponse 類 Write 料 Redirect URL Response.Write("!!

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

ChinaBI企业会员服务- BI企业

ChinaBI企业会员服务- BI企业 商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:du.haoquan@bizintelsolutions.com 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63> 基于 WINCE 平台 C# 编程要点之一 本文主要介绍在基于 Windows CE 平台的英创嵌入式主板下进行 C#(Microsoft Visual Stdio.Net 2005) 应用程序开发时会常常用到的一些功能函数以及开发方法, 这些方法适用于英创采用 WinCE 平台的所有型号嵌入式主板, 包括 EM9000 EM9260 EM9160 等 本文要点包括 : 文件的删除和复制 如何获取存取设备的空间大小

More information

ASP.NET实现下拉框二级联动组件

ASP.NET实现下拉框二级联动组件 ASP.NET 实现下拉框二级联动组件 namespace WebApplicationDlh using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Db; / / Area 的摘要说明 /

More information

untitled

untitled 1 LinkButton LinkButton 連 Button Text Visible Click HyperLink HyperLink 來 立 連 Text ImageUrl ( ) NavigateUrl 連 Target 連 _blank _parent frameset _search _self 連 _top 例 sample2-a1 易 連 private void Page_Load(object

More information

PowerPoint Presentation

PowerPoint Presentation Visual Basic 2005 學 習 範 本 第 7 章 陣 列 的 活 用 7-1 陣 列 當 我 們 需 要 處 理 資 料 時, 都 使 用 變 數 來 存 放 資 料 因 為 一 個 變 數 只 能 代 表 一 個 資 料, 若 需 要 處 理 100 位 同 學 的 成 績 時, 便 要 使 用 100 個 不 同 的 變 數 名 稱, 這 不 但 會 增 加 變 數 名 稱 命 名

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

01_Service

01_Service 移动平台应用软件开发 Service 主讲 : 张齐勋 zhangqx@ss.pku.edu.cn 移动平台应用软件开发 课程建设小组 北京大学 二零一七年 什么是 Service 与 Activity 一样, 同属 Android 基本组件 后台运行, 不与用户交互, 没有可视化界面 最常见的 Service 如 : 在后台播放歌曲 后台执行文件的下载 同样需在 AndroidManifest.xml

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

CHAPTER 1

CHAPTER 1 CHAPTER 1 1-1 System Development Life Cycle; SDLC SDLC Waterfall Model Shelly 1995 1. Preliminary Investigation 2. System Analysis 3. System Design 4. System Development 5. System Implementation and Evaluation

More information

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法 ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 0 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : 0 /// 测试方法 : 测试将 DataTable 导出到 EXCEL, 无模板 public void TestExportToExcelByDataTable() string excelpath

More information

ebook50-15

ebook50-15 15 82 C / C + + Developer Studio M F C C C + + 83 C / C + + M F C D L L D L L 84 M F C MFC DLL M F C 85 MFC DLL 15.1 82 C/C++ C C + + D L L M F C M F C 84 Developer Studio S t u d i o 292 C _ c p l u s

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

untitled

untitled PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說

More information

bingdian001.com

bingdian001.com 1. DLL(Dynamic Linkable Library) DLL ± lib EXE DLL DLL EXE EXE ± EXE DLL 1 DLL DLL DLL Windows DLL Windows API Visual Basic Visual C++ Delphi 2 Windows system32 kernel32.dll user32.dll gdi32.dll windows

More information

云数据库 RDS SDK

云数据库 RDS SDK 云数据库 RDS SDK SDK SDK 下载 SDK 下载 最新版本 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip 历史版本 2015-11-3 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip JAVA 教程 JAVA 创建 Access Key 登陆阿里云账号 打开 我的 Access

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

VB程序设计教程

VB程序设计教程 高 等 学 校 教 材 Visual Basic 程 序 设 计 教 程 魏 东 平 郑 立 垠 梁 玉 环 石 油 大 学 出 版 社 内 容 提 要 本 书 是 按 高 等 学 校 计 算 机 程 序 设 计 课 程 教 学 大 纲 编 写 的 大 学 教 材, 主 要 包 括 VB 基 础 知 识 常 用 程 序 结 构 和 算 法 Windows 用 户 界 面 设 计 基 础 文 件 处

More information

2017創形パンフ表1_表4

2017創形パンフ表1_表4 2017 SCHOOL GUIDE BOOK 2017 SOKEI ACADEMY OF FINE ART & DESIGN 关于创形美术学校? 创形美术学校是培育专业艺术家的摇篮 大家知道 : 用普通的教育课程来培育专业的艺术家是件困难的事 在我们创形, 从老师到办公人员, 大家全体都是专业的艺术家 在美术界, 设计界当中取得卓越成绩的艺术家们将为大家面对面地传授心得 我们重视的并不是通过指定的教学说明书来指导大家,

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

专注于做最好的嵌入式计算机系统供应商

专注于做最好的嵌入式计算机系统供应商 专注于做最好的嵌入式计算机系统供应商 基于 ARMSYS2440/2410 开发应用程序 (EVC&VS2005) Rev 1.0 2008 年 3 月 24 日 杭州立宇泰电子有限公司 HangZhou LiYuTai Elec.Co.,Ltd 开发应用程序的过程一般分两步, 第一步在 PC 机开发环境下设计和编译应用程序, 第二步将它下载到 目标系统, 也就是我们的 ARMSYS2440 平台上运行

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B,

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B, 1 下列类头定义中, 正确的是 A class x B public x extends y C public class x extends y. D class x extends y implements y1 2 现有两个类 A B, 以下描述中表示 B 继承自 A 的是 (D ) A) class A extends B B) class B implements A C) class A

More information

Microsoft Word - 11.doc

Microsoft Word - 11.doc 除 錯 技 巧 您 將 於 本 章 學 到 以 下 各 項 : 如 何 在 Visual C++ 2010 的 除 錯 工 具 控 制 下 執 行 程 式? 如 何 逐 步 地 執 行 程 式 的 敘 述? 如 何 監 看 或 改 變 程 式 中 的 變 數 值? 如 何 監 看 程 式 中 計 算 式 的 值? 何 謂 Call Stack? 何 謂 診 斷 器 (assertion)? 如 何

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

基于 SIMATIC IOT2040 的 Node-red S7 通信 1. 主要目标 基于 Node-red S7 通信, 实现 SIMATIC IOT2040 读写 Siemens S7-300/400/1200/1500 或 S7-200 Smart PLC 中的数据 2. Node-red

基于 SIMATIC IOT2040 的 Node-red S7 通信 1. 主要目标 基于 Node-red S7 通信, 实现 SIMATIC IOT2040 读写 Siemens S7-300/400/1200/1500 或 S7-200 Smart PLC 中的数据 2. Node-red 基于 SIMATIC IOT2040 的 Node-red S7 通信 1. 主要目标 基于 Node-red S7 通信, 实现 SIMATIC IOT2040 读写 Siemens S7-300/400/1200/1500 或 S7-200 Smart PLC 中的数据 2. Node-red 及 S7 节点介绍 2.1 Node-red Node-red 是一种用于以新的有趣的方式将硬件设备

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 C# 和 ASP.NET 4.5 一 实验目的 (1) 了解 C# 语言规范 (2) 掌握 C# 基础语法 流程控制和异常处理等 (3) 掌握创建 C# 类并应用于 ASP.NET 4.5 页面中的方法 (4) 掌握 ASP.NET 4.5 页面的调试方法 二 实验内容及要求 1. 转换输入的成绩到相应的等级要求如下 : (1) 页面浏览效果如图 3-1 所示 (2) 成绩输入使用 TextBox

More information

<4D F736F F D E466F726DB3CCD0F2C9E8BCC6D3EBCAB5BCF920B5DA35D5C22E646F63>

<4D F736F F D E466F726DB3CCD0F2C9E8BCC6D3EBCAB5BCF920B5DA35D5C22E646F63> 第 5 章 输入与输出 学习目标 : 理解文件与流的基本概念 ; 了解文件与目录的基本知识及其常用的类 ; 掌握文件流读写方法 5.1 概述 文件是计算机管理数据的基本单位, 同时也是应用程序保存和读取数据的一个重要场所 C# 中文件处理技术称为 I/O 技术, 即输入与输出技术, 或称为流处理技术或文件流处理技术 5.1.1 文件与流 文件和流是既有区别又有联系的两个概念 文件是指在各种存储介质上永久保存数据的有序集合,

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FB6FE5F2E646F63>

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FB6FE5F2E646F63> ArcEngine+C# TIN 相关三维功能模块介绍 ( 二 ) 下拉框 (ComboBox) 颜色控件 作者 : 刘志远 Email:592418843@qq.com 这一篇介绍如何写一个单色和渐变色的颜色选择下拉框 (ComboBox) 控件 有些功能中, 需要用户自定义选颜色时, 一般只需调用 ColorDialog 颜色选择控件就可以了, 但如果为了更贴近 ArcGIS 的操作风格, 且需要使用渐变颜色时,ColorDialog

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

Visual Basic D 3D

Visual Basic D 3D Visual Basic 2008 2D 3D 6-1 6-1 - 6-2 - 06 6-2 STEP 1 5-2 (1) STEP 2 5-3 (2) - 6-3 - Visual Basic 2008 2D 3D STEP 3 User1 6-4 (3) STEP 4 User1 6-5 (4) - 6-4 - 06 STEP 5 6-6 (5) 6-3 6-3-1 (LoginForm) PictureBox1

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作 * 夏传玲 : 本文简要回顾了国内外定性研究在最近 多年的发展概况, 总结 了定性研究的六个发展趋势和分析策略上的三种流派 在上述两种背景下, 本文探讨了计算机辅助的定性分析给定性研究带来的机遇和挑战, 特别是它和手工操作对比时的优势和劣势, 以及应用这种定性分析技术所可能面临的困难 : 定性研究定性分析 文化差异,, (, ),,,, ( - ) ( - ) ( - ) ( - ) ( - ) (

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p NOWOER.OM /++ 程师能 评估. 单项选择题 1. 下 描述正确的是 int *p1 = new int[10]; int *p2 = new int[10](); p1 和 p2 申请的空间 的值都是随机值 p1 和 p2 申请的空间 的值都已经初始化 p1 申请的空间 的值是随机值,p2 申请的空间 的值已经初始化 p1 申请的空间 的值已经初始化,p2 申请的空间 的值是随机值 2.

More information

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466> packages 3-31 PART 3-31 03-03 ASP.NET ASP.N MVC ASP.NET ASP.N MVC 4 ASP.NET ASP.NE MVC Entity Entity Framework Code First 2 TIPS Visual Studio 20NuGetEntity NuGetEntity Framework5.0 CHAPTER 03 59 3-3-1

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 基本控制结构 3.1 基本控制结构程序设计 实验目的 (1) 掌握 3 种基本结构的程序流程图 (2) 熟练掌握分支结构的程序设计方法 (3) 熟练掌握循环结构的程序设计方法 实验内容 Visual Basic 是结构化的程序设计语言, 有 3 种基本控制结构 : 顺序结构 分支结构和循环结构, 循环结构又分 当型 循环和 直到型 循环 其程序流程图如图 3-1 所示 真 E 假 当 E

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 70-536Chinese(C++) Title : TS:MS.NET Framework 2.0-Application Develop Foundation Version : DEMO 1 / 10 1. Exception A. Data B. Message C.

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Microsoft Word Visual_Basic程序设计上机实践教程正文.doc

Microsoft Word Visual_Basic程序设计上机实践教程正文.doc 实验 3 顺序和分支结构程序设计 实验目的 1. 掌握顺序结构的程序设计思想 2. 掌握命令按钮 (CommandButton) 标签 (Label) 文本框 (TextBox) 编辑框 (EditBox) 等常用控件的使用方法 3. 了解并掌握对话框函数 MessageBox() 的含义与用法 4. 了解和熟悉线条控件 形状控件的画法以及主要属性的用法 实验内容 1. 顺序结构 实训 3-1 编写一应用程序,

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

目录 WinForms 版 ComponentOne SSRSDocumentSource... Error! Bookmark not defined. Winform 版 ComponentOne 工具组件帮助... 1 SSRSDocumentSource 快速入门... 1 在代码中设定网络

目录 WinForms 版 ComponentOne SSRSDocumentSource... Error! Bookmark not defined. Winform 版 ComponentOne 工具组件帮助... 1 SSRSDocumentSource 快速入门... 1 在代码中设定网络 ComponentOne SSRSDocumentSource for WinForms 入门教程 目录 WinForms 版 ComponentOne SSRSDocumentSource... Error! Bookmark not defined. Winform 版 ComponentOne 工具组件帮助... 1 SSRSDocumentSource 快速入门... 1 在代码中设定网络证书

More information

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FC8FD5F2E646F63>

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FC8FD5F2E646F63> ArcEngine+C# TIN 相关三维功能模块介绍 ( 三 ) TreeView 控件控制 TIN 颜色 作者 : 刘志远 Email:592418843@qq.com 1. 简介 本篇介绍如何写一个带复选框及颜色指示图标的 TreeView 控件, 该控件与 TIN 模型分级设色方案中的各级颜色相关联 通过该 TreeView 控件复选框的勾选状态决定 TIN 模型对应颜色层的显示与隐藏, 再结合颜色选择下拉框控件,

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

* r p . 4 6 12 3 5 7 8 9bk bm btbsbrbqbp bo bn bl [ ] [ ] [ ] [ ] [SET] 1 2 3 4 5 6 7. cmcl ck 8 9 0 bk bl bm bn bo 1 2 1 2+ - bp bq 8 2 4 6 br r bs p bt ck cl cm 3 3 . 1 2 3 4 5 6 7 8 9 bk bl bm

More information

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器 串口透传 前言 : 有了上面的基础, 接下来就可以打造无线串口功能了 实现平台 :WeBee CC2540 模块及功能底板 图 3.117 网蜂 CC2540 模块及功能底板实验现象 : 两台 PC 通过串口连接 CC2540, 通过设置好串口调试助手, 就可以相互收发信息 也可在一台 PC 利用两个串口实现这个功能 实验讲解 : 整个实验用到两个模块, 一个作为服务器 一个作为客户端, 重点为下面两个方向

More information