参考书籍:《C#边做边学》;
1.初见C#
1.1 C#简介
-
C # {\rm C\#} C#编写了许多完成常用功能的程序放在系统中,把系统中包含的内容按功能分成多个部分,每部分放在一个命名空间中,导入命名空间语法格式如下:
c#// C#导入命名空间语法格式: using 命名空间;
-
C # {\rm C\#} C#要求程序中的每一个元素都要属于一个类,程序的所有内容都必须属于一个类, C # {\rm C\#} C#类定义语法格式如下:
c#// C#类定义语法格式: class 类名 { 类体 }
-
M a i n ( ) {\rm Main()} Main()方法, C # {\rm C\#} C#程序中,程序的执行从 M a i n ( ) {\rm Main()} Main()方法开始,一个程序中不允许出现两个或两个以上的 M a i n ( ) {\rm Main()} Main()方法, M a i n ( ) {\rm Main()} Main()方法必须包含在一个类中, M a i n ( ) {\rm Main()} Main()方法代码如下:
C#static void Main()
-
C # {\rm C\#} C#程序注释,分为单行注释和多行注释:
- 单行注释:使用"//"表示其后面内容为注释内容;
- 多行注释:使用"/*"、"*/"组成多行注释符号,"/*"、"*/"符号间的内容均为注释内容;
-
C # {\rm C\#} C#控制台输入输出:
-
控制台输入/输出通过命名空间的 C o n s o l e {\rm Console} Console类实现,其提供从控制台读写字符的基本功能;
-
控制台输入通过 C o n s o l e {\rm Console} Console类的 R e a d ( ) {\rm Read()} Read()方法和 R e a d L i n e ( ) {\rm ReadLine()} ReadLine()方法实现,控制台输出通过 C o n s o l e {\rm Console} Console类的 W r i t e ( ) {\rm Write()} Write()方法和 W r i t e L i n e ( ) {\rm WriteLine()} WriteLine()方法实现;
-
C o n s o l e . W r i t e L i n e ( ) {\rm {Console.WriteLine()}} Console.WriteLine()方法:将信息输出到控制台,在输出信息后面添加一个回车换行符,用来产生一个新行;
-
C o n s o l e . W r i t e ( ) {\rm {Console.Write()}} Console.Write()方法:将信息输出到控制台,输出到屏幕后不会产生一个新行;
-
输出格式化语法:
c#// 输出格式化语法(Console.WriteLine()和Console.Write()类似): // Console.WriteLine()为例: Console.WriteLine("{N[,M][:格式化字符串]}"); // 参数说明: // {}:用来在输出字符串中插入变量; // N:表示输出变量的序号,从0开始; // [,M][:格式化字符串]:M表示输出的变量所占的字符个数,当M的值为负数时,输出变量按左对齐方式排列; // 当M的值为正数时,输出变量按右对齐方式排列; // [:格式化字符串]:指定输出字符串的格式,使用Xn形式指定输出字符串的格式,X指定数字的格式,n指定精度; // 格式字符D、d:将数据转换成整数类型格式; // 实例: int iNumber = 1234; Console.WriteLine("{0:D}", iNumber); // 结果:1234; Console.WriteLine("{0:d3}", iNumber); // 结果:1234; Console.WriteLine("{0:d5}", iNumber); // 结果:01234;
-
1.2 第一个控制台应用程序
c#
// CH01_01.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CH01_01
{
class CH01_01
{
static void Main()
{
Console.WriteLine("Hello C#.");
Console.WriteLine("Welcome to FUXI AI.");
}
}
}
c#
// CH01_01.cs执行结果:
Hello C#.
Welcome to FUXI AI.
几个常见工程文件:
- C H 01 _ 01. s l n {\rm CH01\_01.sln} CH01_01.sln:解决方案文件,扩展名 s l n {\rm sln} sln是 s o l u t i o n {\rm solution} solution的缩写,双击即可打开工程;
- C H 01 _ 01. c s {\rm CH01\_01.cs} CH01_01.cs:工程代码文件,扩展名 c s {\rm cs} cs是 C S h a r p {\rm C\ Sharp} C Sharp的缩写;
- b i n {\rm bin} bin\ D e b u g {\rm Debug} Debug下, C H 01 _ 01. e x e {\rm CH01\_01.exe} CH01_01.exe为可执行文件,双击即可执行;
1.3 Windows应用程序简介
- C # {\rm C\#} C#中添加控件:
- 控件表示用户和程序间的图形化连接,控件提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能;
- 添加控件实例:向窗体中添加按钮 ( B u t t o n ) ({\rm Button}) (Button),即在 V i s u a l S t u d i o {\rm Visual\ Studio} Visual Studio工具箱中单击按钮 ( B u t t o n ) ({\rm Button}) (Button),把按钮拖动到窗体预定位置,然后释放鼠标添加完成;
- 控件属性:
- C # {\rm C\#} C#中所有窗体控件,如:标签控件、文本框控件、按钮控件等都继承于 S y s t e m . W i n d o w s . F o r m s . C o n t r o l {\rm System.Windows.Forms.Control} System.Windows.Forms.Control;
- C o n t r o l {\rm Control} Control类作为各种窗体控件的基类,实现了所有窗体交互控件的基本功能,如:处理用户键盘输入、处理消息驱动、限制控件大小等;
- C o n t r o l {\rm Control} Control类的属性、方法、事件是所有窗体控件公有的, C o n t r o l {\rm Control} Control类的属性描述了一个窗体控件的所有公共属性;
- 常用控件属性:
- N a m e {\rm Name} Name属性:每个控件都有一个名字 ( N a m e ) ({\rm Name}) (Name)属性,在应用程序中,可以通过此属性来引用此控件; C # {\rm C\#} C#会给每个新添加的控件指定一个默认名,一般由控件类型和序号组成,如: b u t t o n 1 、 b u t t o n 2 、 t e x t B o x 1 、 t e x t B o x 2 {\rm button1、button2、textBox1、textBox2} button1、button2、textBox1、textBox2;
- T e x t {\rm Text} Text属性: C # {\rm C\#} C#中,每个控件对象都有 T e x t {\rm Text} Text属性,是与控件对象实例关联的一段文本,用户可以查看或进行输入;如:在标签控件中显示的文本、在文本框中用户输入的文字、组合框和窗体中的标题等都是用控件的 T e x t {\rm Text} Text属性进行设定;
- 控件方法:通过调用 C o n t r o l {\rm Control} Control类的方法来获得控件的一些信息,或设置控件的属性值及行为状态,如: F o c u s {\rm Focus} Focus方法可设置此控件获得的焦点, R e f r e s h {\rm Refresh} Refresh方法可重画控件, S e l e c t {\rm Select} Select方法可激活控件, S h o w {\rm Show} Show方法可显示控件等;
- 控件事件: C # {\rm C\#} C#中用户进行某一项操作时,会引发某个事件的发生,此时会调用事件处理程序代码,实现对程序的控制,事件驱动实现基于窗体消息传递和消息循环机制;如:单击时发生的 C l i c k ( ) {\rm Click()} Click()事件,双击时发生的 D o u b l e C l i c k ( ) {\rm DoubleClick()} DoubleClick()事件,取得焦点时发生的 G e t F o c u s ( ) {\rm GetFocus()} GetFocus()事件,鼠标移动时发生的 M o u s e M o v e ( ) {\rm MouseMove()} MouseMove()事件等;
1.4 第一个Windows应用程序
-
新建 W i n d o w s {\rm Windows} Windows应用程序,项目名称: C H 01 _ 02 {\rm CH01\_02} CH01_02,在文件 F o r m 1. c s {\rm Form1.cs} Form1.cs重命名为 C H 01 _ 02. c s {\rm CH01\_02.cs} CH01_02.cs;
-
在已生成的窗体单击,修改窗口的属性, N a m e {\rm Name} Name属性改为:" C H 01 _ 02 {\rm CH01\_02} CH01_02", T e x t {\rm Text} Text属性改为: C H 01 _ 02 {\rm CH01\_02} CH01_02;
-
V i s u a l S t u d i o {\rm Visual\ Studio} Visual Studio的左侧"工具箱"窗口,拖动 W i n d o w s {\rm Windows} Windows控件放置窗口中:
- 拖动 L a b e l {\rm Label} Label控件,修改" N a m e {\rm Name} Name"属性: I n f o D i s p l a y {\rm InfoDisplay} InfoDisplay," T e x t {\rm Text} Text"属性:空," B a c k C o l o r {\rm BackColor} BackColor"属性: W i n d o w s {\rm Windows} Windows;
- 拖动 B u t t o n {\rm Button} Button控件,修改" N a m e {\rm Name} Name"属性: b t n B u t t o n {\rm btnButton} btnButton," T e x t {\rm Text} Text"属性:点击显示;
-
窗体设计如下:
-
双击按钮 ( B u t t o n ) ({\rm Button}) (Button)进入代码设计,代码如下:
c#// CH01_02.cs 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 CH01_02 { public partial class CH01_02 : Form { public CH01_02() { InitializeComponent(); } private void btnButton_Click(object sender, EventArgs e) { this.InfoDisplay.Text = "Welcome to FUXI AI."; } private void CH01_02_Load(object sender, EventArgs e) { } } }
-
C t r l + F 5 {\rm Ctrl+F5} Ctrl+F5执行,点击"点击显示"按钮,结果如下:
1.5 简易AGV运行控制界面
项目需求:搭建 A G V {\rm AGV} AGV简易控制系统,设置 5 5 5个按钮,包括向前、向后、向左、向右、停止按钮,点击按钮显示对应的信息,简易控制系统界面如下:
-
新建" W i n d o w s {\rm Windows} Windows"应用程序,在设计窗口拖动 5 5 5个按钮 ( B u t t o n ) ({\rm Button}) (Button)和 1 1 1个标签 ( L a b e l ) ({\rm Label}) (Label),其 N a m e {\rm Name} Name属性和 T e x t {\rm Text} Text属性如下:
- 设计窗口属性: N a m e {\rm Name} Name属性为 C H 01 _ 03 {\rm CH01\_03} CH01_03, T e x t {\rm Text} Text属性为 A G V C o n t r o l S y s t e m {\rm AGV\ Control\ System} AGV Control System;
- " G O F O R W A R D {\rm GO\ FORWARD} GO FORWARD"按钮: N a m e {\rm Name} Name属性为 f o r w a r d B u t t o n {\rm forwardButton} forwardButton, T e x t {\rm Text} Text属性为 G O F O R W A R D {\rm GO\ FORWARD} GO FORWARD;
- " S T O P {\rm STOP} STOP"按钮: N a m e {\rm Name} Name属性为 s t o p B u t t o n {\rm stopButton} stopButton, T e x t {\rm Text} Text属性为 S T O P {\rm STOP} STOP;
- " G O B A C K W A R D {\rm GO\ BACKWARD} GO BACKWARD"按钮: N a m e {\rm Name} Name属性为 b a c k w a r d B u t t o n {\rm backwardButton} backwardButton, T e x t {\rm Text} Text属性为 G O B A C K W A R D {\rm GO\ BACKWARD} GO BACKWARD;
- " T U R N L E F T {\rm TURN\ LEFT} TURN LEFT"按钮: N a m e {\rm Name} Name属性为 l e f t B u t t o n {\rm leftButton} leftButton, T e x t {\rm Text} Text属性为 T U R N L E F T {\rm TURN\ LEFT} TURN LEFT;
- " T U R N R I G H T {\rm TURN\ RIGHT} TURN RIGHT"按钮: N a m e {\rm Name} Name属性为 r i g h t B u t t o n {\rm rightButton} rightButton, T e x t {\rm Text} Text属性为 T U R N R I G H T {\rm TURN\ RIGHT} TURN RIGHT;
- " i n f o D i s p l a y {\rm infoDisplay} infoDisplay"标签: N a m e {\rm Name} Name属性为 i n f o D i s p l a y {\rm infoDisplay} infoDisplay, T e x t {\rm Text} Text属性为空格;
-
实现程序:
c#// CH01_03.cs 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 CH01_03 { public partial class CH01_03 : Form { public CH01_03() { InitializeComponent(); } private void forwardButton_Click(object sender, EventArgs e) { this.infoDisplay.Text = "AGV is going forward..."; } private void stopButton_Click(object sender, EventArgs e) { this.infoDisplay.Text = "AGV STOP."; } private void backwardButton_Click(object sender, EventArgs e) { this.infoDisplay.Text = "AGV is going backward..."; } private void leftButton_Click(object sender, EventArgs e) { this.infoDisplay.Text = "AGV is turning left..."; } private void rightButton_Click(object sender, EventArgs e) { this.infoDisplay.Text = "AGV is turning right..."; } } }
-
运行效果: