实习指导书第三章基于C#NET的程序设计与开发Word格式.docx
《实习指导书第三章基于C#NET的程序设计与开发Word格式.docx》由会员分享,可在线阅读,更多相关《实习指导书第三章基于C#NET的程序设计与开发Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
数据菜单可使用数据库中的信息。
格式:
格式菜单中的命令选项可管理如何把所创建的控件显示到窗体上。
工具:
工具菜单中有配置C#.NETIDE的命令,以及到其他已安装的外部工具的链接。
窗口:
窗口菜单也是标准的,它允许像Word和Excel那样同时打开多个窗口。
这个菜单中的命令允许在IDE中切换窗口。
帮助:
利用帮助菜单可以访问VisualStudio.NET的帮助文档,访问该文档有多种方式,如通过目录、索引或者搜索。
1.2工具栏
工具栏位于菜单栏的正下方,IDE中有许多工具栏,包括格式、图像编辑和文本编辑等,这些工具栏可通过“视图”菜单下的“工具栏”菜单选项在IDE中添加或删除。
每个工具栏都提供了对常用命令的快速访问,而不必选择相应的菜单选项。
当鼠标在某个工具上悬停的时候,则会出现对该命令的解释。
1.3工具箱
在IDE的左侧或者右侧,有一个竖直排布的按钮(工具箱),单击,可以弹出以下界面,如果没有该按钮则可以通过点击“视图”->
“工具栏”使之显示出来,如图3.4所示。
图3.4工具箱
工具箱中包含了能够运用到Windows编程中的所有控件,除了Windows默认的一些标准控件之外,您还可以添加一些自定义控件或者第三方控件(如我们后面将要使用到的ArcGIS控件)。
1.4解决方案管理器
解决方案资源管理器位于IDE的右上方,这是一个展示了整个工程的树结构,如图3.5所示。
如果没有,点击工具栏上的“解决方案资源管理器”按钮弹出,如图3.6所示。
从解决方案工程管理器中可以清楚的看到各窗体(Form)的名字,类的名字,模块以及包含的资源、引用等。
图3.5解决方案管理器
图3.6“解决方案资源管理器”工具
1.5属性窗口
属性窗口位于IDE的右下方,它随着当前选择控件的变化而变化。
在属性窗口中能快速调整各控件的属性,如控件的名称、显示文字、颜色、大小、位置等,如图3.7所示。
图3.7属性窗口
1.6文档大纲
点击通过如图3.8所示的文档大纲的工具按钮,弹出文档大纲,如图3.9所示。
图3.8“文档大纲”的工具按钮
文档大纲用于显示控件与控件的层次关系,通过文档大纲可以很方便地查看到父控件和该控件的子控件。
图3.9文档大纲
2C#语言简介
C#(Csharp)是微软(Microsoft)在2000年6月发布的一种新的编程语言,是微软为.NETFramework量身订做的程序语言,C#拥有C/C++的强大功能以及VisualBasic简单易用的特性,是第一个组件导向(Component-oriented)的程序语言,和C++和Java一样亦为对象导向(object-oriented)的程序语言。
C#看起来与Java有着惊人的相似:
它包括了诸如单一继承、界面,与Java几乎同样的语法,和编译成中间代码再运行的过程。
但是C#与Java有着明显的不同,它与COM(组件对象模型)是直接集成的,而且它是微软公司.NETwindows网络框架的主角。
C#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点。
例如定义变量、关系运算等。
如果你有C或者C++的基础,那么学习C#语言就相对容易了。
1
2.1变量声明
声明变量就是指定变量的名称和类型。
C#变量声明由一个类型和跟在后面的一个或多个变量组成,多个变量之间需用逗号分开,声明以分号结束。
在声明变量时,还可以初始化变量。
C#变量名是一种标识符,需要符合标识符的命名规则。
变量名是区分大小写的,基本的变量名命名规则包括:
变量只能由字母、数字或下划线组成;
变量名的第一个符号不能是数字;
不能使用关键字作变量名;
一旦在一个语句块中定义了一个变量,在其作用域内就不能再定义同名变量,否则将发生编译错误。
doubledblV1,dblV2;
//局部变量的声明
intintVal=835;
//局部变量的声明并赋值
publicstringmFormName;
//公有成员变量的声明
privatestringmFormName;
//私有成员变量的声明
protectedstringmFormName;
//保护成员变量的声明
2.2表达式与运算符
表达式是由运算符(Operator)和操作数(operand)构成的序列。
运算符指示对操作数进行何种运算。
例如,+、-、*、/和new都是运算符。
操作数是指计算机指令中进行数字运算的量,例如:
在比较指令中,操作数则指定进行比较的两个数值,包括文本、常量、变量和表达式。
在C#中,若表达式最终的计算结果为所需的类型值,表达式就可以出现在需要值或对象的任意位置,如下面的示例代码:
doubledblV1=123.45;
doubledblV2=24.312;
doubledblV3=Math.Sqrt(dblV1*dblV1+dblV2*dblV2);
MessageBox.Show(dblV3.ToString(),"
信息提示"
);
表达式dblV1*dblV1+dblV2*dblV2作为方法Math.Sqrt的参数使用,表达式dblV3.ToString()又是方法MessageBox的参数。
表达式包括常量表达式、布尔表达式等。
运算符是专门用来处理数据运算的特殊符号,对操作数进行运算,并产生运算结果。
运算符包括基本运算符(.、()、[]、++、--、new、sizeof、typeof、checked和unchecked等)、赋值运算符(=、+=、-=、*=、/=、%=、&
=、|=、^=、<
<
=和>
>
=)、算术运算符(+、-、*、/和%)、关系运算符(==、!
=、>
、<
、>
=和<
=)、逻辑运算符等(与(&
)、或(|)、异或(^)和取补(~))、移位运算符(左移位运算符<
和右移位运算符>
)和三元运算符(?
:
)等。
2.3条件语句
if引导的条件语句:
格式:
if(表达式1)语句1;
说明:
如果表达式1成立则执行语句1,否则不执行语句1。
例子:
if(x>
0)y=10;
if-else语句:
else语句2;
如果表达式1成立则执行语句1,否则执行语句2。
elsey=5;
if-elseif-else语句:
if(表达式1)语句1;
elseif(表达式2)语句2;
……
else语句n;
这种格式是从上到下逐个对表达式判断,一旦发现条件满足的表达式,就执行相关的语句,并跳出判断,如果都不满足则执行else相应的语句。
elseif(x==0)y=5;
elsey=1;
switch-case语句:
switch(变量x)
{
case常量1:
语句1;
case常量2:
语句2;
default:
语句n;
}
这种格式是从上到下逐个将变量x与case后的常量比较,一旦发现变量x与某个case后的常量相等,则从该语句向后执行(注意,如果没有break,后面的case语句都会执行),如果没有与变量x相等的常量,的执行default后的语句。
switch(k)
{
case1:
y=1;
break;
case2:
y=10;
case3:
y=100;
y=0;
2.4循环语句
for循环语句:
for(表达式1,表达式2,表达式3)循环体内语句;
先对表达式1赋初值;
判别表达式2是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行表达式3,进入第二次循环,再判别表达式2……;
否则判断表达式2的值为假,不满足条件,就终止for循环,执行循环体外语句。
for(i=0;
i<
100;
i++)
{sum+=i;
}
while语句:
while(表达式)循环体内语句;
这里的表达式是循环能否继续下去的条件。
只要表达式为真,则执行循环体内语句。
否则终止循环,执行循环体外语句。
while(i<
100)
sum+=i;
i++;
do-while语句:
do循环体内语句;
while(表达式)
程序进入do-while循环后,先执行循环体内语句,然后判断表达式的真假,若为真则进行下一次循环,否则为假则终止循环。
该循环语句的特点是:
表达式为假时也执行一次循环体内语句。
do
}while(i<
2.5函数
C#和C++对于函数的定义和使用有很多相同之处,对于这些相同之处不需要一一做详细的介绍,具体请参阅《C#入门经典》这本书(这是一本曾成就无数C#程序员的经典名著,最新版为第5版,2010年12月出版,定价99.8元),该节主要介绍C#特有的特点。
(1)函数参数引用传递与值传递
C#对函数参数做了更明确的标示,使得程序更加清晰可读,通过使用in和out关键字说明了参数的作用,in修饰的参数在形参和实参结合的时候会生成副本,这样对形参的修改就不会对实参产生影响(副作用),因为这个函数内部使用的不是实参而是生成的那个副本。
out关键字函数对形参的修改会对实参产生副作用的,这样out的意思就是说我要用这个参数作为返回值。
这点和C++引用传递的语义是类似的,函数对参数的修改会反映在实参上,这样我就可以得到最终变化的结果,其语义就是return的作用一样。
如果没有in、out修饰则默认是in.如下面两个函数:
publicvoidInternalMagic(intx)函数1
{
x+=100;
publicvoidInternalMagic(inintx)函数2
publicvoidInternalMagic(outintx)函数3
函数1和函数2是一样的,函数3则不同,当调用函数1的时候,传入的参数不会改变,而调用函数3时,传入的参数会自增100.
2.函数的委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性,在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托。
如下代码所示:
publicdelegatevoidDel(stringmessage);
//定义一个委托
//创建一个和委托相似的函数(参数,返回值类型和个数相同)
publicstaticvoidDelegateMethod(stringmessage)
System.Console.WriteLine(message);
//使用委托
//生那么一个委托.
Delhandler=DelegateMethod;
//使用委托.
handler("
HelloWorld"
2.6面向对象
C#是一种完全面向对象的语言,他和C++一样具有类、对象、继承、多态等特点。
与C++不同的是C#不支持多重继承。
另外,C#多了接口的概念。
接口只包含方法、属性、索引器(有参属性)、事件四种成员。
方法的实现是在实现接口的类中完成的,如下面的示例所示:
//定义接口
interfaceISampleInterface
{
voidSampleMethod();
//声明接口的方法
}
//接口的实现体
classImplementationClass:
ISampleInterface
//Explicitinterfacememberimplementation:
voidISampleInterface.SampleMethod()
{
//Methodimplementation.
}
staticvoidMain()
//Declareaninterfaceinstance.
ISampleInterfaceobj=newImplementationClass();
//Callthemember.
obj.SampleMethod();
C#接口的接口弥补了C#在多继承下的不足,使得C#在面向对象方面更加完善。
要想了解更多的关于C#面向对象的知识请参阅《C#入门经典》。
3窗体及其控件简介
在这一小节中,您将接触到几个C#.NET编程中常用的控件及其主要属性。
2
3.1窗体(Form控件)
Form表示组成应用程序的用户界面的窗口或对话框。
如图3.10所示,即为一个窗体:
图3.10窗体(Form控件)
在C#.NETIDE中,支持可视化的编辑,这让程序员将更多的精力放在程序本身的编写上,而不用花费太大的精力到界面的设计。
在IDE中,支持“所见即所得”的模式,也就是说,在编辑过程中各控件的位置与程序实际运行中的位置是一样的(使用程序代码控制控件的属性,如尺寸、位置及可见性等除外)。
在编辑过程中,Form中可以放置不同的控件,用来构建应用程序。
需要插入新的窗体,可以点击菜单栏中的“项目”—>
“添加Windows窗体”,选择“Windows窗体”添加一个新的窗体。
若需要修改已有的窗体名称,则在解决方案资源管理器中修改(与Windows中修改文件名类似)。
单击Form,将其激活,点击右键,转到属性窗口,可以看到Form的属性,如图3.11所示。
图3.11窗体的属性
在Form的属性中,Text属性表示窗体的显示名称;
TopMost控制窗体是否总是位于应用程序最上方;
StartPosition控制窗体生成的时候出现在屏幕上的位置;
FormBorderStyle控制窗体的样式等。
具体Form的属性及时间等信息,请参阅MSDN中的相关定义及解释。
除此之外,在属性窗口中还可以对窗体添加事件,例如鼠标单击、双击事件,捕获键盘和窗口退出等事件。
点击属性对话框中的
按钮即可对窗口添加事件,如图3.12。
图3.12窗口的事件
图3.12中列出了与Form控件相关的所有事件,每个事件代表什么请查阅MSDN,在事件填入相应的函数(函数的名称要符合C#函数的命名规则)则会自动为该窗体添加相应的函数,如Click事件的事件处理函数是OnClick,Form1窗体类中会自动生成一个OnClick函数。
3.2Label控件
Label控件用于显示文字、提示、输出结果等,是C#编程中常用的控件之一。
如图3.13所示。
图3.13任务管理器中的label控件
在Windows任务管理器中的句柄数、线程数、进程数和物理内存中的总数、可用数和系统缓存等都是典型的Label控件。
从工具箱的“公共控件”中点击Label控件,并将其拖入到Form窗体中,并放入适当的位置,即可在窗体中显示Label控件。
与Form窗体一样,点击Label控件使其进入激活状态,就可以在属性窗口中更改Label的属性,其中Text属性是该Label控件显示的内容,是Label控件最常用的属性,同时还可以为Label控件添加事件,其方法和Form控件相似。
3.3Button控件
Button控件是按钮控件,是C#编程中常用的控件之一,它主要用于制作各种类型的按钮,如图3.14所示。
图3.14Windows计算器中的按钮
其中按钮属性中最常用的是Text,该属性用于设置按钮上显示的内容,最常见的事件是Click事件,该事件是处理按钮按下后的事件。
3.4TextBox控件
TextBox控件是文本框控件,既可以用来接受用户输入,也可以用来做结果输出。
如图3.15所示。
图3.15TextBox控件
图3.15中右边控件为文本框控件,用于接收用户的输入,如果要得到用户的输入数据,则可以访问该文本框控件的Text属性,另外还可以接收文件框得到或者失去焦点的事件等。
3.5菜单控件
菜单控件分为两类,一类是界面菜单,另一类是上下文菜单,界面菜单一般位于程序的上面,包括文件、编辑、视图等,上下文菜单一般是当鼠标右键按下弹出的右键菜单,如图3.16所示。
图3.16界面菜单(左)和上下文菜单(右)
C#中的界面菜单和上下文菜单是用不同的控件来表示的,界面菜单是MenuStrip控件,上下文菜单是ContextMenuStrip控件。
下面对它们的用法一一介绍。
(1)MenuStrip的用法:
从工具箱的“菜单和工具栏”中点击MenuStrip控件,然后再点击或者拖动到目标Form控件中去,即可以为该Form控件添加一个界面菜单。
一般界面菜单都在Form控件的最上方,也可以通过改变MenuStrip的Dock属性来改变MenuStrip控件的位置。
Dock属性包括Top、Bottom、Left、Right、Fill和None六种选择,分别代表将该控件放置在父控件的上方、下方、左方、右方、充满父控件和不设置。
一旦创建了MenuStrip就可以创建菜单项,菜单项分为五种类型,一种是ToolStripMenuStrip,该类型就是最常用的一种菜单类型,它类似于按钮,按下即可触发特定的菜单事件。
如图3.17中的“安全性设置(E)…”就是ToolStripMenuStrip类型的菜单项。
除此之外,还有MenuStrip、ComboBox、TextBox和Separator类型的菜单项,可以通过点击菜单项后面的三角符号选择菜单项的类型。
图3.17ToolStripMenuStrip类型的菜单项
图3.18选择菜单项类型
其中MenuStrip表示级联菜单,如图3.18。
ComboBox表示将菜单项改成如复选框类型的菜单项,TextBox是将菜单项改成可输入的文本编辑框,而Separator是将该菜单项目改成菜单分隔符,双击该菜单项,即可为该菜单项加入一个单击事件,按delete键可以将该菜单项删除。
(2)ContextMenuStrip的用法:
ContextMenuStrip菜单项的添加、编辑和为菜单项添加事件与MenuStrip相同,它与MenuStrip不同的是弹出的时机不同,它需要当鼠标右击的时候弹出。
此时只需要设置窗体控件中的ContextMenuStrip属性为新建的ContextMenuStrip对象名称就可以了,如图3.19所示。
图3.19设置窗体的ContextMenuStrip属性
3.6ToolStrip控件
ToolStrip控件就是工具条控件,通过它可以制作各式各样的工具条,与菜单项类似,工具条上的工具项也有很多类型,它可以是按钮,可以是复选框,可以是文本框,也可以是一个进度条等。
如图3.20所示。
图3.20不同类型的工具项
其中button类型的工具项是在工具条上添加一个按钮,注意一般工具条上的按钮都是有图标的,因此,必须要为工具条的上的按钮指定Image属性。
Image属性可以从磁盘文件中导入图片资源,也可以用项目自带的图片资源。
Label类型的工具项是在工具条中加入一个Label对象。
其他的如SplitButton、DropDownButton、Separator、ComboBox、TextBox和ProgressBar请查阅MSDN或者亲自试验一下。
在此不需一一累述。
3.7常用对话框
C#还提供了一些常用的对话框,如打开对话框、保存对话框、字体选择对话框和颜色对话框等。
不需要对这些对话框重新设计,只需要将这些对话框控件拖入到目标窗体中直接调用即可。
下面着重讲述一下打开对话框的使用方法,其他对话框的使用方法与此相同,不需要一一累述。
第一步:
设置对话框的弹出事件。
在此,我们用一个按钮事件来表示,即点击按钮弹出打开对话框,在目标窗口Form1控件中加入一个按钮控件,将按钮控件的Text属性改为“打开对话框…”,同时将“设计”中的Name属性改为”OpenDialog”(此步骤可以不要,如果不要,系统会自动生成一个随机的无意义名字,建议将其改成一个有意义的名称),如图3.21。
图3.21“打开对话框”按钮
第二步:
从工具箱中对话框选项中选择OpenFileDialog控件,并将“设计”中的Name属性改为“mOpenFileDialog”。
第三步:
双击“打开对话框…”按钮,进入该按钮的单击事件,在该事件中显示打开对话框。
其中FileName记录了打开对话框中选中的文件,另外OpenFileDialog控件还