文字教程: | | | : | |
| 文字教程: |
文字教程: | | |
文字教程: | | 文字教程: | | 文字教程: | | | |
当前位置
C语言教程:使用Visual C#制作可伸缩个性化窗体(1)
文章类别:
| 发表日期:10-12-26
使用Visual C#制作可伸缩个性化窗体(1) 谁都希望自己的应用程序能让人留下一个深刻的印象,让自己的程序窗体有一件与众不同的外衣是一个好办法。试想:在一大堆的普通窗口中突然跳出一个很酷的界面,一定能让人眼睛一亮进而产生兴趣的。
在VB,VC中如何定制可伸缩个性化窗口早就不是什么秘密了,已经有了大量相关的文章进行介绍,无非都是如何调用系统API之类的方法,但是在.Net中调用API却相对比较麻烦,所以使用.Net制作个性化窗体的文章也有一些,一般都是使用透明背景加图片的方式,所以不能移动/任意放大缩小窗体。那有没有不需要调用系统API的方法来实现可伸缩的个性化窗体的办法呢?当然有,.Net Framework提供了一套非常强大的系统类库,我们下面就要做一个使用纯.Net打造的可伸缩个性化窗体。
我们需要将窗体所有的皮肤全部换成我们自己定义的,包括标题栏,边框和系统按纽等,所以我们首先需要定做一套自己的皮肤图形文件。因为窗体是可伸缩的,所以我们不能简单的取一整幅图片来作为窗体皮肤,而是根据需要先将图片切割为不同的部分,一般来说,有以下图示几大部分(红线为切割线):
根据方位,将图片各部分命名为:Bottom_Left,Bottom_Middle,Bottom_Right,Middle_Left,Middle_Right,Top_Left,Top_Middle,Top_Right,SysButton_Min,SysButton_Max,SysButton_Close,SysButton_Restore等。注意,有些图片是可以伸缩的地方,比如Middle_Left,Bottom_Middle等处的图片可以只是一小块,以后需要进行重复贴图。而有些固定大小的图片,比如Bottom_Left,Top_Left等以后只用贴一次,实际应用的时候要注意区分。
采用以上原则,你便可以制作皮肤图片,图示如下:
然后可以将这些图片放到ImageList控件或资源文件中供程序调用。
接下来,我们使用Visual Studio .Net新建一个Windows应用程序的项目,在窗体的属性设置中,将窗体的FormBorderStyle属性设置为None(无边框样式),如下图所示:
定义一个资源管理器:
private ResourceManager rm ;
然后使用以下的方法在Form的构造函数中将图片取出来(资源文件名为Skin.resources):
rm = new ResourceManager(SkinWindow.Ski quot;, A embly.GetExecutingA embly());
Bottom_Left = (Bitmap)rm.GetObject(Bottom_Left);
&helli (其它的图片也按照此方法取)
重载Form的OnPaint事件:
Graphics g = e.Graphic //手工画窗体的各个部?
DrawMiddle_Left(e.Graphics);//画左边框
DrawBottom_Middle(e.Graphics);//画下边框
DrawMiddle_Right(e.Graphics);//画右边框
DrawBottom_Left(e.Graphics);//画左下角
DrawBottom_Right(e.Graphics);//画右下角
DrawTop_Left(e.Graphics);//画标题栏左边
DrawTop_Right(e.Graphics);//画标题栏右边
DrawTop_Middle(e.Graphics);//画标题栏中间
DrawSys_Button(e.Graphics);//画系统按纽
以下是上述画皮肤方法的具体实现部分,我只举一个画左边框的代码示例,其它的部分请读者举一返三:
private void DrawMiddle_Left(Graphics g)
Brush brush = new TextureBrush(Middle_Left, new Rectangle(0, 0, Middle_Left.Width, Middle_Left.Height));
g.FillRectangle(brush, 0, TITLE_WIDTH, Middle_Left.Width, Height - Bottom_Middle.Height - TITLE_WIDTH);
衣服穿上了,现在我们的程序就有了不同的外观:
看上去已经很酷了,不过只是花架子,因为边框,标题栏,系统按纽都是我们自己画上去的假的边框,标题栏和系统按纽,所以这个窗体既不能移动也不能自由的放大缩小,点关闭都没用。以前我们写程序从来都不需要关心这个的,这些都是窗体的基本功能呀?没有从来都没有想到这个竟然还会是个问题吧?
怎么办呢?***就是我们自己来做,不过会比较麻烦,因为取消掉了边框,所以Windows不会帮你发出系统事件,你捕捉不到系统发生了什么事情的话,就没有办法写下响应代码,所以我们要自己检测鼠标的坐标,并根据鼠标的动作,自己来发出事件消息,然后进行响应。
首先我们先定义出一些响应事件的代码,我定义了一个抽象的基类MouseAction,用来表示所有的鼠标事件,它有一个抽象方法Action:
public a tract cla MouseAction
public a tract void Action(int ScreenX, int ScreenY, System.Windows.Forms.Form form);
然后再来定义出它的各个派生类来表示出具体每个鼠标事件响应的代码。
下面是一个向右拉伸窗口事件的代码响应:
public cla MouseSizeRight : MouseAction
private int lx;
public MouseSizeRight(int LocationX)
lx = LocationX;
public override void Action(int ScreenX, int ScreenY, System.Windows.Forms.Form form)
form.Width = ScreenX - lx;
form.Invalidate();
非常简单和容易理解,我就不再赘述,其它的各个事件也都一样简单,这里也不给出所有事件的实现代码,只是列举一下还需要实现的代码响应类:
MouseSizeLeft:拉伸左边框
MouseSizeBottom:拉伸下边框
MouseSizeTop:拉伸上边框
MouseSizeTopLeft:拉伸左上角
MouseSizeTopRight:拉伸右上角
MouseSizeBottomLeft:拉伸左下角
MouseSizeBottomRight:拉伸右下角
MouseDrag:鼠标拖动
鼠标拖动同样也很简单,不过却稍不同于窗口的缩放拉伸,这里举出它的实现代码:
public cla MouseDrag : MouseAction
private int x, y;
public MouseDrag(int hitX, int hitY)
x = hitX;
y = hitY;
public override void Action(int ScreenX, int ScreenY, System.Windows.Forms.Form form)
form.Location = new Point(ScreenX - x, ScreenY - y);
接下来我们开始编写发出事件的代码,先定义几个变量:
private int LEFT = 5, RIGHT = 5, BOTTOM = 5, TOP = 5, TITLE_WIDTH = 45;//边框和标题栏的大小
private int x = 0, y = 0;//保存鼠标的临时坐标
private MouseAction mouse;//鼠标的事件响应对象
然后在Form的MouseDown事件中记录下鼠标的当前坐标:
x = e.X;
y = e.Y;
附:e为System.Windows.Forms.MouseEventArgs
然后再根据鼠标的坐标定义出事件响应对象:
//鼠标点击左上边框
if((e.X = LEFT + 10 &am am e.Y = TOP) || (e.Y = TOP + 10 &am am e.X = LEFT))
mouse = new MouseSizeTopLeft(Location.X, Location.Y, Width, Height);
retur }
当然有的事件也可以直接响应:
//鼠标点击系统关闭按纽
if(e.X Width - 20 &am am e.Y 6 &am am e.X Width - 20 + SysButton_Min.Width &am am e.Y 6 + SysButton_Min.Height)
Close();
retur }
大部分的事件响应实际上是在MouseMove事件中完成的:
private void Form_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
this.Parent.Cursor = CheckCursorType(e.X, e.Y);//改变鼠标的指针形状
if(mouse != null)
mouse.Action(Control.MousePosition.X, Control.MousePosition.Y, this);//执行时间响应
//注意坐标是Control.MousePosition这个静态变量给出的,它的值为鼠标在桌面上的全局坐标
给出每个不同部位的鼠标的指针形状:
private Cursor CheckCursorType(int X, int Y)
if(((X = LEFT + 10 &am am Y = TOP) || (Y = TOP + 10 &am am X = LEFT)) || ((X = Width - RIGHT - 10 &am am Y = Height - BOTTOM) || (Y = Height - BOTTOM - 10 &am am X = Width - RIGHT)))
return Cursors.SizeNWSE;
else if(((Y = TOP + 10 &am am X = Width - RIGHT) || (Y = TOP &am am X = Width - RIGHT - 10)) || ((X = LEFT &am am Y = Height - BOTTOM - 10) || (Y = Height - BOTTOM &am am X = LEFT + 10)))
return Cursors.SizeNESW;
else if(X = Width - RIGHT || X = LEFT)
return Cursors.SizeWE;
else if(Y = Height - BOTTOM || Y = TOP)
return Cursors.SizeNS;
return Cursors.Arrow;
最后在MouseUp事件中将mouse变量释放掉:
private void Form_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
mouse = null;
为了更加逼真,还可以加上标题栏的双击最大化或者还原的事件:
private void Form_DoubleClick(object sender, System.EventArgs e)
if(y TOP &am am y TITLE_WIDTH)
if(WindowState == FormWindowState.Normal)
WindowState = FormWindowState.Maximized;
SysButton = SysButton_Restore;
Invalidate();
else if(WindowState == FormWindowState.Maximized)
WindowState = FormWindowState.Normal;
SysButton = SysButton_Max;
Invalidate();
防止窗体被缩小成一个点,最好给窗口的MinimumSize赋上一个适当的值,例如200,200。
总结:
现在编译你的程序,运行试试,你的窗体已经拥有正常窗体所拥有的全部功能,并且还具有与众不同的外观,不明就里的人一下子还猜不出来你是怎么弄的,好了,乘别人还不知道,赶快拿出去炫耀一下吧 :)。
下一篇:
人气:2008
视频教程列表
文章教程搜索
输入您的搜索字词 google
提交搜索表单
C语言程序设计推荐教程 |
地址:湖北省武汉市曹家湾32号501室 ***:027-86646545 15972130058
21视频教程网专业的网站开发视频教程学习网站
15972130058分享 分享 使用Visual Studio 2005开发Silverlight
Well, in VS2005 you can create a cla library which will build agai t the Silverlight runtime, but it's a little work.
1. Create a Cla Library.
2. Remove all references from it.
3. Right-click on the Project and pick Properties.
4. On the Build tab, click Advanced and check 'Do not reference mscorlib.dll'
5. Manually add references to mscorlib, agclr, System, System.Core, System.Silverlight, and System.Xml.Core from the Silverlight i tall folder (\Program Files\Microsoft Silverlight\)
At this point your build outputs should be Silverlight co umable binaries. It looks like the equivalent command line call to csc.exe (the C# compiler) should include the references to the mentioned binaries and the /nostdlib option but may require others as well.
这是silverlight开发组Scott Louvau一个回复中写道的
1.创建一个类库
2.删除其中所有引用
3.右击项目选择属性
4.在生成选项卡中点击高级,并勾选中不引用mscorlib.dll'一项
5. 从Silverlight***中文件夹(\Program Files\Microsoft Silverlight\)添加对mscorlib,agclr,System,System.Core,System.Silverlight和 System.Xml.Core的引用
6.在生成选项卡中,输出路径修改为ClientBin\
7.需要在iis中点击站点属性,在HTTP Header rdquo;标签页中,点击MIME Type rdquo;,点击新建,加入以下条目(根据不同需要添加类似于mp4的条目):
mp4 video/mp4
xaml a lication/xaml+xml
dll a lication/x-msdownload
6和7是我自己补充的,这样就可以在vs2005下开发silverlight了,不过VS2005下不能够调试,如果实在需要调试,只好在虚拟机中***Orcas,Orcas不可以跟VS2005并存也的确比较郁闷。
万事具备,最好在VS2005下还能有xaml的智能感知,其实这个很容易,只要找到Silverlight相应版本的SDK,在压缩包里可以得到一个schema (silverlight.xsd)文件,它对xaml文件作出了定义,只要将这个文件放入
C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas
就可以在写xaml文件的时候得到智能感知功能。
除了不能调试,VS2005几乎可以做一切Silverlight的工作。省却了庞大的Orcas,立刻Light up the web吧。
如果大家已经在使用Visual Studio 2005做开发,现在又需要学习开发Silverlight应用程序。下面我们简单的介绍一下如何在VS2005中开发Silverlight。
首先需要下载
。***Silverlight开发模板
方法如下:
1、确认VS2005已经***SP1,如果没有***请下载***(强烈建议***SP1)。下载地址:
2、***Silverlight项目模板。确认关闭VS2005,将Silverlight1.0SDK\SilverlightBetaToolsForVS2005.zip压缩包中的SilverlightJSA lication.zip复制到Document gt;\Visual Studio 2005\Templates\ProjectTemplates\Visual C#目录下。
3、再次打开VS2005,打开新建项目对话框,你将看到Silverlight Javascript A lication的项目模板
就这么简单,大家可以试一下。
注意:这个环境还不能开发Silverlight 1.1 alpha程序。如果需要建议***Orcas beta
Silverlight
Hello SilverLight 4(写给初学者的SilverLight教程)
今天是第一课,我选择的参考书是《Hello SilverLight4》。看书名就知道这是一本入门的书,所以对于我们菜鸟来说,这本书最合适啦!学会之前不要逃走哦!
我们的教程一共有8章,它们分别是:
1. SilverLight是什么东东?(我:微软的东东)
2. SilverLight的控件们(一看就知道是微软的风格,控件编程正合适咱们菜鸟)
3. SilverLight的数据服务(没有数据的东东最多也就是展示性质的)
4. 通过Expre ion Blend学习XAML(对于咱们菜鸟来说,这是重点和难点)
5. 做一个Fish Eye按钮(效果比这章的标题要另人兴奋的多)
6. WCF RIA服务的再利用(...我也不懂)
7. 脱离浏览器(看看怎么个情况)
8. SilverLight游戏编程(可以不看前面直接学习这章吗?)
希望这8部分不会太枯燥,好了,废话说太多,咱们开始进入正题。
一 Hello SilverLight
人们(特别是咱们程序员)总是害怕改变,因为这意味着又要学习新东西了。当要开发RIA时恐怕我们又要学习一大堆不知所云的东西。如果做为.NET程序员的你选择了Flex开发的话,上面的情况就无法避免了;如果你选择了SilverLight,那并没有多少新东西要学习,相信我,这是真的。有很多程序员(像我一样),在从事WEB开发。还有很多程序员,在从事桌面程序开发。尽管ASP.Net企图把这两者有机的结合起来,但是还是有点不同。例如,我想动态的改变一下字体大小和颜色,在Web开发中,恐怕要使用JavaScript,但在桌面应用程序中,这小菜一碟。SilverLight也在向这方面努力,尽量使得双方的程序员都能尽快的适应SilverLight开发,第七章将详细进行说明。如果你开发过WPF应用程序的话,那太好了,你可以直接跳过许多章。这并不夸张,因为SilverLight是WPF的一个子集。比如它们都使用XAML界面语言。要让用户看到你的SilverLight程序,需要一个5MB大小的插件,就像Flash一样。不过这个插件可比Flash强多了,它对完整版.NET进行了精简,支持非常多的.NET功能。这意味着.NET的众多优点也被SilverLight继承了。
RIA这个概念最早由Macromedia在2002年提出,并在其Flash中实现。RIA程序使用起来的感觉和桌面程序非常相似,只不过RIA程序不能够拥有对用户磁盘读写的所有权限(出于安全考虑才出此下策)。抛开SilverLight和Flex我们来看一看RIA的通用特征吧!
失量图形
众所周知,现今有两大图形格式(别告诉我你不知道!),位图和失量图。两种格式的优缺点不知道的同学可以上网上查一下,因为篇幅关系,这里就不在做介绍了。值得注意的是,失量图形在透明,缩放等动画效果上比较位图有相当大的优势哦!
不得不承认,最先吸引我学习SilverLight的就是这个所谓的动画,结果我完全被骗了。在传统的网页中我们也可以通过Timer以及JavaScript来创建一个动画,每隔一个特定的时间段就执行一次特定的任务(通常是改变一个值),以此来实现动画效果。而这些效果在SilverLight中小菜一碟。
客户端存储
有一次,我刚从网上看完一部大片,我感觉这部电影拍的非常棒。于是我想到把自己激动的心情通过博客来与大家分享,进入博客的编辑器我开始打字,正当我将要完成的时候,浏览器死掉了!可以想像当时我是多么的沮丧。我相信很多人都有类似的经历,通常的建议是先在本机的编辑器中(比如Word)把内容编辑好,然后再复制粘贴到网上。这的确是一个好办法,但是对于此我们真的就无能为力了吗?有人提到Cookie,但是它的容量太小了。我们来看看SilverLight是怎样处理这件事情的,它叫做独立存储(Isolated Storage)技术,后面我们会详细的说明。
开发工具
你可以使用记事本来开发,以此来显示你有多么与众不同。大部分正常人还是会选用Visual Stdio或Expre ion Blend来进行开发。VS便于调试,Blend便于布局和制作动画,区别主要就是这样。可以使用两种开发工具的原因其实很简单,那就是让设计人员和程序员关系处的更好一些,因为他们可以使用同一种工具同一种语言进行交流。而不是程序员看着一堆PhotoShop制作的PSD文件发呆。
好了,说了不少,可以开始创建我们的第一个SilverLight应用程序了,Let&rsquo go!
一个世上最简单的SilverLight程序
我将使用VS2010 Expre 来进行演示,Microsoft很厚道的为我们提供了一个免费版本。
视频内容
好的,我们的程序创建完毕了,事实上,它看起来像一个网页,显示了一行文字Hello SilverLight4。但它不是。我们会在后面把它更完善一些。
双击MainPage.xaml文件你将会看到如下内容:
UserControl x:Cla =HelloSilverlight.MainPage
xml =http://schemas.microsoft.com/winfx/2006/xaml/presentatio quot;
xml :x=http://schemas.microsoft.com/winfx/2006/xaml
xml :d=http://schemas.microsoft.com/expre ion/blend/2008
xml :mc=http://schemas.openxmlformats.org/markup-compatibility/2006
mc:Ignorable=d
d:DesignHeight=300 d:DesignWidth=400
Grid x:Name=LayoutRoot Background=White
/UserControl
这就是XAML标记语言,它是基于XML的,可读性非常的好。正如你所看到的,在XAML中不会混合其它的代码,Flex就做不到这一点。
xml =http://schemas.microsoft.com/winfx/2006/xaml/presentatio quot;
这几行是引用名称空间,和纯XML不同的是,这些URI是有意义的。它们在编译时会映射到相应的.NET空间。
代码和XAML分离的好处之一是,界面工作和程序工作可以同时进行。
设置Grid x:Name=LayoutRoot Background=Blue可以使背景变成蓝色,就像使用HTML和CSS一样,这样做是为了使传统的WEB开发人员可以快速的适应SilverLight开发。事实上大部分的CSS样式可以在SilverLight中找到对应的(几乎是完全相同的)属性。
今天就到这里了,更加精彩的内容在后面呢。(2010.6.28)
今天咱们继续,昨天的内容大家应该都能明白怎么个情况吧?不明白的地方可以发送邮件到chehongzhi@163.com,我会一一解答。那么就开始今天的教程吧!
新建一个SilverLight项目后会IDE也就是VS2010会为我们自动生成一些文件(VS是神器!),这些文件里面有三个最重要:
MainPage.xaml:这个文件就是我们做大部分工作的地方,这里面我们可以放控件,可以做动画,可以在MainPage.cs后台文件中写我们枯燥的程序。
APP.xaml:这里面是全局资源,也就是说,这里面的东西在整个应用程序运行的过程中都可以使用。
APP.cs:这里面是SilverLight程序初始化的一些代码,我们后面会说明里面是什么东东。
其它还有很多文件随项目生成,不过一般情况下没什么用,又因为这是一个初级教程,所以这些文件也就不一一的说明了(其实其中一个原因是:我也不懂- -)。
XAML是基于XML的,所以不太懂XML的同学可以先去了解一下XML。不过我觉得XML发展到现在,大家应该都明白XML是怎么个情况吧?
现在我考考你们:
TextBlock Height=56 Margin=12,25,85,0 Name=textBlock1
Text=Hello, Silverlight! VerticalAlignment=To quot;
Foreground=White FontSize=30 /
上面的XAML显示什么内容?我想即使你不懂技术,查查字典也能明白上面例子的***吧。从这个例子可以看出,XAML标记中的属性几乎完全等同于传统WEB开发中的CSS样式。
部署SilverLight应用
SilverLight应用程序易于部署。为什么这么说呢?因为SilverLight只有两个文件需要部署(一个xaml文件和一个dll文件,如果你的程序中有图片、声音和视频等资源的话,这些资源也包括在内),说部署有点复杂,就是只有两个文件需要拷贝到你的服务器上,而就是这两个文件还被打包成一个后缀为xap的文件,也就是说,你写好程序,把生成的xap文件拷到服务器上,就OK了,你要说这都不会我抽你。
Xap文件生成在应用程序目录下的BIN\Debug目录。Xap其它是一个ZIP压缩文件,这么做的原因是ZIP文件可以被很好的压缩和解压。
把这一段HTML插入到网页中,你的SilverLight程序就会被用户看到了。
object data=data:a lication/x-silverlight-2, type=a lication/x-silverlight-2
width=100% height=100%
< aram name=" ource value=ClientBin/HelloSilverlight.xa quot;/
< aram name=onError value=onSilverlightError /
< aram name=" ackground value=white /
< aram name=minRuntimeVersio quot; value=4.0.41108.0 /
< aram name=autoUpgrade value=true /
a href=http://go.microsoft.com/fwlink/?LinkID=149156&am v=4.0.41108.0 style=text-
decoration:none
img src=http://go.microsoft.com/fwlink/?LinkId=161376 alt=Get
Microsoft Silverlight style=" order-style:none/
/object
如果以前你在网页中使用过Flash,那这些代码你一定不陌生。蓝色的代码是当用户没有***SilverLight时,会显示的内容,它会提示用户下载并***SilverLight。
当然,你可以改成其它的图片,至少把它变成中文的!
RIA使得桌面程序和Web程序的界限更加不明确了,当全屏使用SilverLight时,几乎完全无法感觉到这是一个Web程序。
SilverLight使得我们.NET程序员不用去学习新的复杂的技术,以现有的技术和编程语言就可以开发Flash一样的程序。
SilverLight容易部署,XAML标记语言向WEB公开自己的DOM树,以方便搜索引擎的收录。通过下面的学习,你将会看到SilverLight真正的特点(当然,前面的教程也不是假的,只是让人提不起精神)。
[持续更新中....]
为了您的安全,请只打开来源可靠的网址 来自: 来自:
第一分享:
2010-12-25 19:59
本贴分享:
累计分享:
人发表观点
...目前还没有互动观点,输入您的互动观点
山上的茶花的
相关分享:
2006-2011 copy BaiduISBN C#和.NET 3.0第一步——适用Visual Studio 2005与Visual Studio 2008
图书分类
计算机考试类图书
化学化工
机械材料汽车能源
工业工程
工业设计
建筑土木水利
环境与给排水
生物与医学
电工基础与电气工程
科普读物
社会职业培训
航空航天
计算机基础
计算机组成与原理
算法与程序设计
计算机技术及应用
计算机网络
图形图像与多媒体
计算机辅助设计
软件工程
数理基础
信息安全
电子信息
计算机--其他
经济管理
人文社科
非英语专业本科教材
非英语专业研究生教材
专升本教材
英语专业教材
选修课系列教材
专门用途英语教材
学术类图书
考试类用书
娱乐休闲英语
英语学习方法
非英语语种图书
外语--其他
高职高专--公共基础课
高职高专--人文社科类
高职高专--计算机类
高职高专--电子信息类
高职高专--机电类
高职高专--工科类
高职高专--经济管理类
高职高专--服务类
基础教育--英语
基础教育--信息技术
中职教育--计算机类
中职教育--公共课
中职教育--经济管理类
中职教育--电子信息类
中职教育--机电类
中职教育--服务类
C#和.NET 3.0第一步——适用Visual Studio 2005与Visual Studio 2008
作者:周礼
全程全面掌握C#语言和.NET 3.0;
完全适用Visual Studio 2005与最新的Visual Studio 2008;
用通俗易懂的讲解与诙谐幽默的语言来阐述精深的技术;
采用3W1H思想编写——What(是什么)、Why(为什么)、Where(用在哪儿)、How(怎样用);
对概念的地道讲解+对疑难点的透彻剖析;
从Hello World开始,直至完整项目实例;
本书技术网站www.pandaos.com
图书详细信息:
ISBN:9787302171904
定价:99元
印次:1-2
装帧:平装
印刷日期:2009-1-8
图书简介:
本书共分三篇,每篇十章,共三十章,兼顾理论和实际应用。三篇承上启下地讲解了VC#的开发技术和应用技巧。
第一篇介绍.NET Framework 3.0开发框架和C#语言的基础知识,透彻地讲解了面向对象开发思想在C#中的贯彻、基本的WinForm窗体编程模型、文件读写技术和注册表操作,使读者在学习完本篇之后能够使用WinForm进行小型的应用开发。
第二篇包含了C#语言相关的高级概念,如集合对象、泛型、程序集、多线程等等,重点讲述了VC#中数据处理的相关技术,如ADO.NET编程、数据集、数据绑定、DataGridView控件、打印和报表等,同时,对面向对象的分析与设计、组件技术、三层架构,以及最新的WWF(工作流)都作了深入浅出的讲解和应用示范。
第三篇主要关注网络方面的知识,介绍了C#点对点通讯编程、Internet访问,重点讲述了Web开发的相关模型,包括ASP.NET Web开发、ASP.NET Ajax、Web服务等,并引入最新的面向服务编程模型WCF和面向描述编程模型WPF,讲解了它们的概念和实际运用,同时,对与实际项目开发密切相关的***与部署技术、单元测试和重构技术,以及代码的加密和混淆技术都作了讲解,使读者能够了解企业级网络应用的设计与开发。
本书在讲解具体的知识点时均采用直观短小的实例进行讲述,对书中的难点和疑点均采用相关的生活案例或图形图像来描述,使读者更容易掌握其技术的本质。在讲透具体的技术点后,则会给出项目级的实例来展示这些技术在实际中的运用,使读者能够对相关的企业级开发做到融会贯通。
本书适用于C#和.NET初学者、开发者和讲授C#和.NET的教师,也可作为大学及计算机培训班的C#和.NET课程教材。
从开始学习和使用计算机程序语言以来,我一直是一个忠实的C++爱好者。但如今我和其他很多新老程序员们一样被C#深深吸引,原因何在?要讨论这个问题还需要从头说起。大部分人,包括我,在开始学习程序语言时都会按照自己的想法和兴趣去学习,比如C太过经典,要学习它;C++可以做游戏,有趣,学习它;VB可以快速的开发,半天时间就能折腾出个管理系统什么的,学习它;Java程序员的薪水一直以来都很可观哦,牛啊,学习它……现在的问题是每一门语言你可能都要花很长的时间去学习,而且如果你没有开发项目的经验那么你始终掌握不了这门语言的精髓。另外,更重要的是,如果你是这门程序语言的初学者,那么你对即将要展开学习的这门语言很难有一个全面而正确的认识。
作为一名程序设计技术的工程人员和培训教师,我始终在考虑关于如何学习程序语言的问题。如今的程序设计技术已是遍地开花,你想精通其中任何一个领域的技术都要花费几年甚至更长的时间。记得C++程序领域一直有这样一种说法,如果一个人搞过几年C++就声称自己精通C++,那么此人一定对C++还没有入门,因为即使有十年、二十年使用经验的人也不敢说自己精通C++,这是一门没有“顶”的语言。所以说,不要随随便便去学习一门新的程序设计语言,这是浪费时间的举动。这涉及到学习一门语言的出发点的问题,在选择学习一门新语言时,应该以经济利益和实际需要为出发点,而不是以自己的爱好和兴趣为出发点。
你可能对这个观点嗤之以鼻,我们不妨举个例子。假如在五百年前,你去习武,成为了一个武林高手,那么你会生活得很好;但在现在这个社会呢,你练了十年八年猴拳,你能干嘛?去当保镖,还是去打家劫舍落草为寇?这些似乎都不是很理想的职业。21世纪是需要人才,但已不太需要武林高手这样的人才。况且,当今的中国还是发展中国家,我们只是基本实现了小康,还没有过上物质极大丰富的生活,如果你花大量人力、物力来学习的东西最后变得毫无价值,不能给你带来经济上的利益和生活的改善,那么可以认为你做了毫无意义的事情。所以说学习程序语言意义重大,需要有选择的去学习。
程序语言就是一个工具,像其他很多工具一样,它是可以帮助我们创造价值的工具。一个工具的意义不在于它多有趣以及难度有多高,而在于它是否能创造价值。如果你操纵过工业流水线,你会发现制造一部手机并不比拿锤子做一把椅子更困难,但工业流水线比锤子有价值得多。同样,一门程序语言并不会因为它简单易懂而变得没有价值,关键在于它是否能创造价值。C#和Java相比C++来说都是操作相对简单的语言,但这并不能说明它们差,恰恰相反,它们更优秀,因为它们可以创造更多的价值。
这里要注意的是,我们通常所说的学习C#、掌握C++都不是指学习和掌握这门程序语言本身,而是指学习和掌握这门语言及这门语言背后的开发技术。而对于任何一门语言来说,它背后的知识都浩如烟海。以C++为例,据不完全统计,它已经在几百个领域有所作为,我们熟悉的领域有视频、游戏、科学计算、网络软件、操作系统、设备驱动程序、移动***等,至于火星机器人智能驱动系统、导弹火控系统等都是常人所不能接触到的领域。通常每一个领域都需要相应的语言库或说技术来支持,比如,使用C++处理视频,你需要学习DirectShow或VFW,使用C++开发游戏你需要熟悉DirectX或OpenGL,使用C++开发驱动程序你得了解PCI总线协议以及DDK等。无论是DriectShow还是OpenGL,你花个一两年也只能算入门。这说明了一个问题,对于一门程序语言的知识,如果要想全部去掌握和学习是不可能的,我们只能有选择的且按照科学的顺序去学习。
C#语言是一门诞生不久的语言,在语法方面它兼顾了Java和C++的特点,在应用方面它吸收了VB、Java及C++的优点。它出生在微软这个豪门中,它的使命是让复杂的Java应用变得简单,使困难的C++应用变得容易,它势必成为平台和Web开发的新宠儿。正如我们所说,一门程序语言是否重要要看它能否带来巨大的价值,C#的价值似乎毫无争议,使用它你可以最快速地完成图书管理系统、人事管理系统、资产管理系统等信息系统,使用它你可以轻松地完成企业网站、电子商务等应用。从微软的白皮书来看,C#语言似乎已经无所不能,从普通的桌面和Web应用,到视频、游戏、科学计算等它都可以出色地完成。这一切都是你选择学习和使用C#的理由,因为一旦选择了C#就好比获得了一把尚方宝剑,人鬼妖魔它一切通杀。
同样,C#语言所包含的技术也是繁多的,如何学习它们成为一个难题。在如今这个知识爆炸的年代,似乎学习任何知识会都成为一个难题,难在不知道如何选择要学习的东西上。事实上,一百年前清朝的洋务派已经提出了“学以致用”的思想,这个思想放在今天也是适用的。学到的东西一定要是我们能用到的东西,这样的学习才有意义。对于编程语言也一样,一定要有选择地学习你所需要的或者你将来能够使用的技术,否则就是在浪费时间。比如你花大量的时间去学习如何使用C#编写网络游戏和设备驱动就是在浪费时间,因为C#的语言特性决定了它不适合做这些应用。本书关于C#内容的选择正是以“学以致用”为出发点来选择的,内容包括了在普通商业软件开发中需要的知识,而不是C#的所有知识。
另外,本书是按3W1H的思想来编写的。3W1H即What(是什么)、Why(为什么)、Where(用在哪里)、How(怎样用)。这个思想本来是我们这些IT培训讲师授课的思路,但我发现这也是一本好的书籍应该贯彻的思想。即本书在介绍所有知识点时,都会按照它是什么、为什么它是什么、该知识在实际开发中用在哪里及怎样使用的顺序来讲解,这样就有助于阅读的人全面、真正地获得知识。
3W1H中前两个比较容易实现,但后两个却很难做到,现实生活中也是这样。我以前认识一个快速切菜器的推销员,这个推销员时常在附近的超市门口推销它的快速切菜器。有意思的是,在他背后的超市里也有这种切菜器卖,而且价格还比他的便宜。奇怪的现象发生了,我发现超市里的切菜器根本没人买,而购买他商品的人却络绎不绝。问题出在哪里,难道是因为这个推销员特别能“忽悠”?不是!原因就在于推销员是一边演示他的商品一边卖,而超市只是把商品放在那里。推销员的演示告诉了人们怎样使用这种新型切菜器,这就是问题的根本。如果一个人不知道怎样使用这个商品,那买回去又有何用。同样,一本书在介绍知识的时候能否告诉读者这个知识用在哪里也至关重要,一个读者如果学习到不知道如何使用的知识那就是在浪费时间。
至于C#详细的学习方法已经具体体现到了本书的每个章节里,在这里我只简单的提一下。我们知道,C#是微软公司鼓捣出来的语言,毫无疑问它会为微软的操作系统服务,因为微软的任何产品,包括游戏、数据库、开发工具都有这个任务(为Windows系列服务的义务)。也毫无疑问,VC#会取代VB、VC成为Windows操作系统桌面软件的首要开发语言,我们不敢说C#将在Web领域打败Java,但对于Windows操作系统平台开发,将没有哪门语言可以与其争锋。因此,你首先要了解C#关于桌面软件的开发知识。这些知识包括C#中的Windows Form、ADO.NET等知识。当然,学习这些知识的前提是你要掌握C#基本语法及通用操作,这部分知识包括变量、语句、类定义、字符串类、读写文件、异常操作等。
有了C#基本语法、通用操作及Windows Form等相关知识,你就可以制作相应的信息管理系统了,这些系统包括财务系统、人员管理系统、收支系统等等。在编写C#相关软件有了一定的心得体会以后,你就可以学习其线程、集合、组件等相关内容了,这些知识对于创建大中型的项目非常有帮助。此后,在对平台开发有了一定的基础后,再去学习复杂的Web开发技术你会觉得更容易上手,因为微软为桌面开发和Web开发提供了相似的开发模型。C#面向Web开发方面包括的内容有:ASP.NET、XML操作、Web服务等,这些知识可以使你创建普通的企业网站和电子商务应用。
所有这些都学完后,你就可以去了解一下怎样部署桌面程序和Web程序的相关知识了。因为软件在制作完成后还需要***和部署才能使用,所以这一步骤也是必须的。最后,你如果想让你的项目达到可重用性、可读性等诸多“国际”标准,你还得研究一下设计模式、极限编程、单元测试、重构等开发思想和开发技术,它们会使你的代码更加精良,软件更有价值。
本书结构
本书分为三篇共三十章。
第一篇称为“门”,就是入门的意思。此篇介绍.NET Framework 3.0开发框架和C#语言的基础知识,讲解了面向对象开发思想在C#中的贯彻、基本的WinForm窗体编程模型、文件读写技术和注册表操作,使读者在学习完本篇之后能够使用WinForm进行小型的应用开发。
第二篇称为“质”,涉及C#中用处最大难度最高的一些知识,包含了C#语言相关的高级概念,如集合对象、泛型、程序集、多线程等等,重点讲述了VC#中数据处理的相关技术,如ADO.NET编程、数据集、数据绑定、DataGridView控件、打印和报表等,同时,对面向对象的分析与设计、组件技术、三层架构,以及最新的WWF(工作流)都作了深入浅出的讲解和应用示范。
第三篇称为“道”,包括Web技术等相关内容,是C#中最具特色的部分。此篇介绍了C#点对点通讯编程、Internet访问,重点讲述了Web开发的相关模型,包括ASP.NET Web开发、ASP.NET Ajax、Web服务等,并引入最新的面向服务编程模型WCF和面向描述编程模型WPF,讲解了它们的概念和实际运用,同时,对与实际项目开发密切相关的***与部署技术、单元测试和重构技术,以及代码的加密和混淆技术都作了讲解,使读者能够了解企业级的网络应用的设计与开发。
每篇分十章,以递进的方式安排内容,在前面的章节中不会出现后面章节的知识,这样有助于阅读,因此也建议读者在阅读时从头开始阅读。
三篇共三十章基本囊括了C#企业开发用到的所有知识,详细解释如下:
第1章:详细介绍.NET 3.0平台的相关概念,使读者对.NET平台的运行机制有一个初步的了解。
第2章:讲解C#语言的基本语言元素,包括变量、运算符、语句等内容。
第3章:此章开始介绍面向对象概念,讲解C#中类的定义和使用等相关知识。
第4章:讲解C#面向对象设计中的继承、抽象、接口等高级概念。
第5章:讲解C#中的委托、事件、枚举、分布类及类型转换等概念。
第6章:讲解C#中的Windows Form相关概念及其常用控件。
第7章:深入C# Windows Form GDI+、Control类等相关概念,并讲解一些复杂控件的使用。
第8章:讲解C#异常处理相关的内容。
第9章:初步讲解存储的概念,包括文件操作和文件读写等内容。
第10章:基于前9章知识的项目案例——图书收藏系统。
前十章为第1篇,掌握后可以进行普通桌面级软件的开发。我们知道,一个普通的桌面软件包括界面和简单的存储功能。以Windows歌曲播放器为例,需要一个播放音乐的界面,还需要有歌曲列表的简单存储功能。对于C#桌面软件来讲,界面可采用Windows Form来实现,数据保存功能采用文件来实现,如此一来,第一篇的知识已足够构建一个简单的小型C#应用软件了。
我们再来看第二篇的内容:
第11章:讲解重要的C#集合框架,包括常用集合类及集合接口。
第12章:讲解C#泛型相关的技术。
第13章:讲解C#多线程操作的相关内容。
第14章:本章讲解访问数据库的相关技术,包括ADO.NET、数据集等概念。
第15章:讲解数据绑定及C#特色数据控件——DataGridView控件的操作。
第16章:讲解如何使用C#实现打印和报表等功能。
第17章:本章讲解组件技术,包括程序集、反射、平台调用等技术。
第18章:本章讲解软件三层架构和软件开发方式等方面的内容。
第19章:讲解最新的工作流(WWF)开发方面的技术。
第20章:基于前面知识的项目案例——黑木崖家庭财务管理系统。
第2篇以桌面软件开发为基础讲解了C#编程知识中的一些高级概念。这些概念并不一定在每个项目中都会用到,但对于企业级软件开发来说却都很重要。这些概念都是以桌面软件开发技术为基础进行讲解的,这样做一方面可以增进读者对桌面软件开发技术的掌握,一方面也可以更直观的阐述这些知识。如前所述,.NET平台为Web开发和Windows开发提供了相似的开发模型,所以本篇所介绍的内容也同样适合于后面的Web开发。比如集合、线程、数据集、打印、报表、三层架构等所有内容都同样适合于后面的Web开发。
第三篇也是最后一篇,内容如下:
第21章:讲解C#网络通讯编程,包括基于协议的点对点通讯和基于Intenet的通讯等。
第22章:讲解XML语法及XML文档读写操作相关的知识。
第23章:初步讲解C# Web编程,包括HTML初步、ASP.NET入门等内容。
第24章:ASP.NET编程进阶,深入讲解ASP.NET相关技术。
第25章:讲解传说中的Web服务的相关技术。
第26章:讲解.NET Framework 3.0重量级组件——WPF(Windows描述基础)。
第27章:讲解WCF通讯服务及AJAX技术。
第28章:讲解项目***及部署等相关的内容。
第29章:讲解单元测试和重构等方面的技术。
第30章:使用ASP.NET完成的项目案例——天天购物商城。
后十章也就是第三篇,内容比较杂,但都是关于网络开发的相关知识。网络开发包括点对点通信和Web开发两种模型的内容。在本书中我们以Web开发为主,之所以在第21章也介绍了点对点通信的相关技术,那只是为了能够让你更进一步的了解C# Web编程模型。我们知道将来的软件将越来越向Web应用靠拢,因此第三篇的很多知识内容都很有意义,比如Web服务、WPF、AJAX等技术现在还处于发展阶段,现在以及将来的意义都非常重大。
最后值得一提的是,本书还包括附录和多媒体配书光盘一张。附录部分位于本书的最后,内容包括C#编程规范和Visual Studio IDE操作快捷键等。多媒体光盘里面包含本书的近500个源代码示例以及几个视频教材,可以帮助你更快速地体验和理解书中的程序。如果你需要当面咨询或者下载其他的示例及视频,可以登录本书的技术网站“www.pandaos.com”,在这里面你可以获得更多的技术支持。
首先要感谢清华大学出版社的陈冰编辑,没有他本书不可能出版。这本书是他策划的“第一步”系列图书中的一本。我很喜欢“第一步”这个名字,从人类直立行走迈出人类进化的第一步,到人类踏上月球开始人类征服宇宙的第一步,都展示了第一步的重大意义。正所谓万事开头难,正确地踏入某门程序语言设计的第一步也同样具有至关重要的意义。另外,陈冰是一个很细心的编辑,他帮我扫清了书中的很多错误,甚至一些细微之处。
除此之外,我要感谢我的同事和学生,他们对本书提出了宝贵的意见,他们是甘文冰、马晓欢、夏小兵老师,以及T03、T04、T07班的学生。特别是我的学生,在我创作本书的一年时间里因为时间大量被写作占用,因此在教学方面出现了不少失误,在此感谢他们的谅解和支持,如今他们大部分已经在软件企业就业,祝愿他们在新的工作岗位上工作顺利、事业有成。
最后要感谢我的女朋友贺贞,在我写书的这段日子里,她基本上成了我的健康和生活顾问,感谢她对我的理解和支持。最后要感谢我的其他朋友们,有了他们我的生活才会变得丰富多彩,创造更有动力。他们是黄波、车小婵、郝洪梅、姜晨、何娟、邓桂梅、姚本俊、欧雅倩、刘俊菊、苏冬梅、李瑶、周韵昀、季晓林、兰泽林、贺晨曦等。
现在,书已经在你的手中打开,是时候读书了。
2008年1月1日于深圳
进入Microsoft .NET世界 2
Microsoft .NET的理念 2
Visual Studio .NET的历史和延承 3
初识 .NET Framework 4
.NET Framework的架构 5
什么是公共语言运行时(CLR) 5
微软中间语言——MSIL 6
.NET框架中的编程语言 7
多语言支持和语言互操作的基础——CTS和CLS 7
了解.NET类库 8
开发环境的*** 9
Visual Studio的*** 10
***.NET Framework 3.0环境 11
关于Visual Studio 2007及Visual Studio 2008 14
开始我们的应用程序 15
你的第一个C#程序 15
Visual Studio 2005介绍 17
帮助文档的使用 23
小结 25
C#语言基础 26
学习数据类型 26
变量的概念 26
值类型 28
引用类型 32
运算符和表达式 33
算术运算符 33
关系运算符 35
逻辑运算符 36
赋值运算符 38
移位运算符 39
运算符的优先级 40
掌握语句 42
分支结构语句 43
循环语句 48
跳转语句 55
你必须了解的细节 58
数组 58
变量的作用域 61
类型转换 63
代码注释和#region指令 65
小结 66
C#中的面向对象 67
类的定义 68
什么叫字段 70
方法又是什么 71
类的使用——以鸭子为例 74
类成员的访问 76
类和对象的关系 77
类的数据成员的存放问题 78
类成员的存放 78
有点特别的静态数据成员 79
关于方法成员的更多研究 80
静态方法 80
方法重载及其意义所在 81
构造方法——初始化类中的数据成员 83
析构方法——销毁对象回收资源 84
属性和索引器的作用 86
属性 86
索引器 90
小结 94
面向对象的高级概念 95
继承 95
创建和使用继承 96
基对象引用子类实例——父母可以代表孩子做很多事情 100
base关键字 102
this关键字——用来调用本类成员 105
抽象类 106
何谓抽象和抽象类 107
实现抽象类 108
接口——多继承的换代产品 112
接口的定义和实现 112
显式接口实现——解决接口继承时的同名方法冲突 117
接口的使用 119
会飞的鸭子 120
定义鸭子类 120
使用继承 121
抽象类的作用 122
接口的好处 124
小结 126
高级类型 127
委托 127
委托的概念 127
委托的秘密 130
多播委托——引发连锁反应 130
事件 133
事件机制的原理 133
***抓小偷 135
其他类型 137
枚举 137
结构——C语言的遗产 140
密封类——不能被继承的类 141
分部类——解决超长类代码的存放 142
匿名方法 143
可空类型 144
命名空间——区别同名类 145
数学类 146
日期类型 147
随机数类 148
字符串类 150
类型运算 155
类型转换 155
is运算符——检查某个对象是否与给定类型兼容 159
as运算符 160
溢出检查的启用和取消——checked和unchecked 160
out和ref 161
typeof运算符 161
小结 162
Windows窗体编程 163
第一个窗体程序 163
建立第一个窗体程序 164
窗体代码分析 166
窗体事件机制 168
基本窗体控件 169
按钮(Button)控件 170
多选框(CheckBox)控件 170
单选按钮(RadioButton)控件 171
标签(Label)控件 171
文本框(TextBox)控件 172
组合框(ComboBox)控件 174
一个小例子——IT技术调查 175
其他常用控件 176
滚动条(ScrollBar)和进度条(Progre Bar) 176
列表框(ListBox)控件 177
工具栏(ToolStrip)控件 178
状态栏(StatusStrip)控件 179
列表视图(ListView)控件 180
树视图(TreeView)控件 182
小结 185
窗体控件编程 186
高级控件 186
创建菜单 186
多文档应用程序 189
容器控件 191
对话框控件 192
GDI+的原理 193
画直线和曲线 195
绘制填充区域——使用刷子类 197
绘制图像——使用Image类 199
绘制文字——小例子:枚举系统支持的所有字体 200
窗体事件处理模型的基础——消息机制 202
Windows消息机制 203
重要的Control类 206
小结 209
处理异常 210
异常的产生——Bad Smell导致的问题 210
代码的错误有哪些 211
如何发现错误 213
使用调试器 214
断点管理窗口 215
自动窗口 216
监视窗口 217
即时窗口 217
使用调试器——一次程序调试实战 218
为程序买份保险 220
结构化异常处理 222
异常类和异常家族 223
多重catch语句 224
嵌套异常结构 226
自定义异常 228
使用自定义异常 228
如何正确使用异常 229
小结 230
操作文件和注册表 231
了解和操作注册表 231
了解注册表 232
操作注册表并编写一个简单的注册表编辑器 233
文件和文件夹操作 237
文件操作类及其使用 238
文件夹操作类及其使用 241
读写文件 243
流的概念——流就是“牛” 243
文件读写的方法 245
编码方式 245
文件流操作 247
9.3.4.1
一个Hello World级的文件流操作例子 249
9.3.4.2
创建一个简单的Windows记事本 250
读写文本数据及用流读写器重写文件流读写文件的例子 251
小结 254
案例——书籍收藏系统 255
项目背景 255
项目描述 255
软件的生命周期 255
10.1.2.1
了解软件生命周期的五个阶段 256
10.1.2.2
关于软件质量的几点做法 257
功能的组成 258
功能的实现 259
界面设计 259
代码实现 263
小结 271
集合对象 273
数组 273
认识Array类 273
使用Array类 274
动态数组 276
认识ArrayList类 277
操作ArrayList 278
使用ArrayList缓存数据——一个简单的学员管理系统 280
哈希表 283
认识Hashtable类 284
Hashtable的操作 284
使用嵌套Hashtable——创建一个***本系统 287
集合空间的接口 290
Icollection接口 291
Ienumerable接口及其使用 291
Ilist接口 293
自定义集合类 294
专用集合类 297
栈Stack 298
队列Queue 299
SortedList集合 300
更方便的操作字符串集合——StringCollection和StringDictionary集合 302
小结 303
泛型 304
为什么使用泛型 304
泛型思想的引出 304
C#泛型简介 306
泛型定义及其应用 307
泛型结构体 308
泛型类 309
泛型接口 311
泛型委托 312
泛型约束 314
泛型集合 315
泛型List集合 316
泛型哈希表——Dictionary 317
泛型队列 319
泛型栈 320
泛型的应用 321
使用泛型要注意的问题 321
一个泛型使用的示例 323
小结 326
多线程 327
进程与线程的概念 327
使用线程 329
认识Thread类并创建你的第一个带线程的程序 329
线程的方法和状态 332
线程的优先级及实用实例 334
线程的同步 336
锁定机制——使用Lock关键字 338
最常用的同步基元——监视器 340
事件 343
13.3.3.1
一个体现通知机制的例子 343
13.3.3.2
用三条线程去分别得到房子、车子和妻子 345
理解线程池——外加一个Word模拟程序 346
多线程应用 348
何时使用线程 349
集合中的线程安全 349
使用线程操作Windows窗体 352
13.4.3.1
采用计时器来设计一个闹钟程序 352
13.4.3.2
使用线程来实现闹钟功能 353
一个线程的例子——福利彩票双色球 356
小结 359
ADO.NET编程 361
数据库基础 361
SQL Server 2005的***与使用 361
SQL简介 364
创建数据库 366
创建表 368
如何对数据进行增、删、改 370
如何查询数据 371
更快的执行速度——存储过程 374
数据库管理的基本操作 375
ADO.NET简介 376
ADO.NET的组成部件 377
ADO.NET的新特性 378
连接式访问数据库 379
如何连接数据库 380
如何操作数据库增、删、改、查 382
读取数据库结果集 386
事务操作的原理及其使用 387
调用存储过程 389
参数对象 390
调用无返回值的存储过程 392
调用带返回值的存储过程 394
数据集 396
认识数据集 397
建立数据表 397
数据集综合操作 401
断开式操作数据库 404
认识数据适配器 405
填充数据集 406
把数据集中的数据同步到数据库 408
小结 415
数据绑定 416
更强大的数据呈现——使用DataGridView控件 416
DataGridView的属性和方法 417
将DataGridView绑定到数据集 417
将DataGridView绑定到数据视图 420
将DataGridView绑定到数组 422
将DataGridView绑定到集合 423
定制DataGridView控件 423
数据集与数据绑定 427
提高代码的可读性——类型化数据集 427
BindingSource组件的优势 430
绑定DataGridView控件 431
绑定的应用 435
绑定到文本框 435
绑定到组合框 437
示例——一个简单的人事管理系统 438
小结 443
打印和报表 444
为你的程序添加打印功能 444
打印的原理与实现 444
认识打印控件——创建一个带打印功能的程序 447
打印DataGridView数据 449
水晶报表 450
快速建立水晶报表——创建一个家庭财务开支系统 451
报表查看器控件 457
报表文档 458
专业的报表设计器——水晶报表专家 460
加载和使用水晶报表 461
筛选报表数据 463
小结 465
组件技术 466
搭积木游戏 466
应用程序交互的发展史 466
组件的概念 468
认识程序集 468
弱名称和强名称程序集的区别 469
如何建立和使用程序集 470
反射技术 476
反射的概念 476
使用反射访问程序集 476
天下皆积木——平台调用 480
特性的概念 480
如何调用Windows API 481
如何调用COM组件 482
小结 485
软件开发方式 486
面向对象的分析与设计 486
OOAD的必要性 487
软件的组成“材料” 487
面向对象分析 489
面向对象设计 490
掌握VS .NET的类图设计器的使用 491
软件的体系结构 495
软件体系中的内容 495
组件 496
模式 496
18.2.3.1
设计模式——一个应用单例模式的例子 497
18.2.3.2
一个工厂模式的例子 498
软件的设计原则 500
.NET的三层架构 500
三层架构的构成 501
为什么要使用三层架构 503
一个应用三层架构的示例——家庭理财系统 503
18.3.3.1
建立数据库 503
18.3.3.2
小试三层架构 505
18.3.3.3
实现界面层 512
18.3.3.4
实现业务层 514
18.3.3.5
实现数据层 515
18.3.3.6
完成项目 518
小结 519
Windows工作流基础(WWF) 520
工作流的基础 520
你的第一个工作流程序 520
理解宿主的概念 525
理解活动(Activity)的概念 525
顺序工作流 527
顺序工作流控件 527
建立顺序工作流 529
状态工作流 532
状态工作流控件 532
建立状态机工作流——实现一个红绿灯系统 534
工作流的应用 538
向工作流传入数据 538
让工作流调用外部方法 540
使用事件控制工作流 543
实现更现实的工作流——订单处理流程 547
订单处理业务 547
建立订单状态工作流 548
应用工作流组件 552
工作流应用领域 558
小结 558
案例——黑木崖家庭财务系统 559
需求分析 559
项目名称及背景 559
需求规定 559
运行环境规定 561
系统设计 561
应用三层架构 561
数据库设计 562
界面设计 567
功能实现 569
账户管理模块 570
账薄管理模块 577
财务中心模块 588
系统中心模块 590
小结 592
网络编程 594
网络编程基础 594
网络通信基础 594
System.Net命名空间概述 596
网络通讯编程 596
TCPClient和TCPListener类的使用——编写一个点对点聊天工具 597
使用UDPClient——无连接的发送数据方式 599
实现一个P2P聊天室 601
访问Internet 609
用WebClient访问Internet——实现下载和上传文件的例子 609
WebRequest 类和WebRe o e类及其使用 611
使用浏览器控件——制作一个简单的浏览器 612
小结 615
XML 616
XML简介 616
XML的由来 616
XML的组成 617
什么时候使用XML 618
XML的语法 619
构成元素——剖析一个基本的XML文档 619
XML语法要点 620
CDATA语法 621
命名空间 622
什么是实体 624
架构(Schamer)——XML文档的验证 625
Schema语法 628
XML的读写操作 630
XML的流式读写——一个流式读写XML的例子 630
XML的随机读写——几个随机读写XML的例子 635
编程验证XML文档的有效性 641
数据集与XML 642
小结 644
ASP.NET基础 645
HTML简介 645
标签 646
表单 652
脚本 655
进入ASP.NET的世界 657
ASP.NET概述 657
配置ASP.NET的运行环境 658
你的第一个ASP.NET程序 659
简单控件 663
Label控件 664
TextBox控件 664
CheckBox控件 664
RadioButton控件 664
Button 665
Image控件 665
DropDownList控件 667
Calendar控件 669
AdRotator控件 669
小结 670
ASP.NET进阶 671
Web对象模型 671
Page对象及其使用 671
HttpRe o e、Cookie、HttpRequest对象及其使用 674
A lication、Se ion对象及其使用 678
Server对象和PostBackUrl属性及其使用 680
数据绑定 684
绑定控件属性 684
GridView控件及其使用 685
DataList控件及其使用 686
FormView控件及其使用 688
高级Web控件 690
登录控件 690
验证控件 691
导航控件 692
WebParts控件——创建一个简单的Web部件应用 693
Master Pages模板页 696
小结 699
Web服务 700
大道的到来——Web服务 700
创建你的第一个Web服务——一个简单的令人吃惊的计算服务 701
相关术语 704
创建Web服务 706
创建Web服务 706
发布Web服务 708
使用Web服务 712
在Windows项目中使用Web服务 713
在Web应用中使用Web服务 716
Web服务示例——创建一个股票查询系统 716
小结 721
Windows描述基础(WPF) 722
新时代的开发框架WPF 722
WPF简介 722
你的第一个WPF程序 723
XAML概述及剖析 726
WPF基本控件 728
按钮控件 729
文本及图片控件 731
视图控件 732
容器控件 736
数据绑定控件 739
26.2.5.1
绑定控件属性 739
26.2.5.2
绑定XML数据源 739
26.2.5.3
绑定对象 740
26.2.5.4
绑定数据集 742
图像与多媒体 745
创建2D图形 745
创建一个简单的3D图形 747
创建动画——一个渐变的长方形 748
音视频播放——创建一个媒体播放器 749
小结 751
WCF和AJAX 752
什么是WCF 752
WCF技术基础 752
创建一个简单的WCF服务 754
承载和使用WCF服务 757
AJAX技术 761
AJAX简介 761
JavaScript的语法 762
创建并解析一个AJAX应用 767
使用ASP.NET AJAX组件创建AJAX应用 768
小结 772
项目的***与部署 773
项目部署 773
***部署的类型 773
部署桌面应用程序——创建一个桌面程序***包 774
部署Web应用程序 779
保护你的知识产权——给你的程序加密 780
混淆器简介 781
使用混淆器来加密程序 783
Windows服务 787
创建一个Windows服务 788
使用应用程序配置文件 791
使用Windows服务来部署程序 793
小结 794
单元测试和重构 795
单元测试 795
单元测试的概念 795
使用NUnit进行单元测试 796
重构(Refactoring) 801
为什么要重构 802
何时进行重构 803
重构的方法 803
使用Visual C#重构菜单 808
提取方法 809
重命名 810
封装字段 811
提取接口 812
将局部变量提升为参数 813
移出参数 814
重新排列参数 815
小结 816
案例——天天购物商城 817
需求分析 817
项目名称及背景 817
需求规定 817
运行环境规定 818
系统分析 818
应用三层架构 819
数据库设计 820
界面设计 823
功能实现 824
主页面实现 825
购物车实现 829
详细信息页面 830
结算中心模块 834
小结 837
C#语言规范 838
命名规范 839
注释规范 844
行文规范 845
附表 851
快捷键参考 854
网络资源:
配套教学用书(配套教参、主课本等):
可替代教学用书:
丛书名称:
图书书评:
【欢迎来稿】 总编办: 客户服务:(010)62776969
教师服务***:010-62770175-3506
反盗版举报***:(010) 62782989
质量反馈:(010) 62772015
邮购***:(010) 62786544
邮购地址:北京市海淀区清华大学出版社邮购组收 邮编:100084
读者服务部(购书):(010) 62781733
通讯地址:清华大学学研大厦 A 座 邮编:100084
网管信箱:
版权所有(C)2005 清华大学出版社有限公司
Copyrights @ 2005 by Tsinghua University Pre . All Rights Reserved
京ICP备 05029640 号