C#/ASP.net 探索之旅

 C#/ASP.net 探索之旅


我是一个普通程序员,读大学期间才接触计算机,一开始用Turbo Pascal编写程序,毕业设计用Borland C++做一个代码几万行的项目,稍微得到一点提高。毕业后因为工作需要,也是对Borland的喜爱,改用Delphi编写程序。

最近两年.net闹得挺欢,找了一些资料阅读后觉得将来很多项目开发还真的不能离开她。于是买了一些图书来阅读,不过这些书常常让我糊涂。后来我索性抛开这些图书,一边用C#编写一些小程序一边学习,遇到不明白的地方再带着问题去读书,反而慢慢积累了一些学习C#编写程序的一些经验。不敢隐瞒,立即记录下来,供广大同仁参考。



第1章 组件,还是组件
可视化RAD开发工具出现过后,我们变得懒惰了,很多时候编程变成了搭积木。当然,这也是一种进步,当.net推出的时候,我想她应该吸取了过去众多的应用程序编程框架,提供有最好的组件库和开发方式。
所以,启动Visual C#后,我迫不及待的期望通过使用新的组件库来编写一个小程序,一方面,通过这个程序,我能够了解.net组件库的情况,另外一方面,我可以通过这个程序探索C#编程的特点。

1.1 C#版本的microEditor
多年前用Turbo Pascal编写了一个Editor后,每使用一个新的开发工具,就先用它编写一个Editor就成了我的习惯,学习C#也是这样。

1.1.1 启动Visual C#熟悉基本界面
启动Visual Stdio.net,多年使用各类开发工具的经验让我明白,编写任何一个程序一般要从创建一个项目(Project)开始。很快我就找到了“文件”子菜单中的“新建/项目…”命令。

图1-1

弹出的“新建项目”对话框中,如图1-1,我选择:(1)项目类型:使用Visual C#作为编程语言;(2)模板:编写“Windows应用程序”;(3)项目名:microEditor。
确定后进入开发主界面,如图1-2。和其他RAD开发工具相比,我感觉这个界面也很容易熟悉。大型应用程序都有的菜单,工具条和状态条和其他开发工具都差不多。对于可视化开发工具常用的“工具箱”和“设计窗体”布置在最显眼的位置,很容易就明白他们的意图。通过菜单栏的“视图”子菜单项也很容易调出其他设计用工具窗口,对我而言,各类组件的属性窗口是最常用的,所以我把他放在了右边,方便设置。

图1-2

软件沉思:在使用Visual Studio.net的过程中我发现我的15英寸显示器有些小了。在编写和调试程序的时候,常常需要打开好几个窗口,他们不但铺满了我的显示器,还让有些窗口躲在了后面,调用起来非常麻烦,有些影响效率。但是我又担心,大多数用户还在使用15英寸的显示器,开发人员和用户的不一致是否会引起程序易用性问题。

1.1.2 寻找Editor组件
我的目的是想通过编写小程序熟悉.net Frameworks提供的组件,熟悉用C#编写所谓的WinFroms应用程序也就是常规Windows应用的特点。然后逐步学习网络应用相关程序的开发特点。所以,我急于通过拖放几个组件到主窗体上,设置他们的属性,编写相关事件的代码,然后运行调试这个程序。我们以前使用其它可视化开发工具的时候不就是这样做的吗?
可是,我找了半天,却没有找到我以前常用的Memo组件,甚至到“定制工具箱”对话框中都没有找到,最后我放弃了,把RichTextBox组件放到了窗体上。作为最主要的文本编辑工具。
当然,这个程序不能没有主菜单,于是我又把主菜单拖放到了主窗体上,这个时候,我发现Visual Studio.net和Delphi的一个区别,窗体上并没有出现主菜单控件,而是跑到了下面,当点击它的时候就可以编辑我们需要的菜单项。如图1-3。

图1-3

当然,我们不能让程序运行的时候编辑器小小的显示在窗体的中间,我得设置richTextBox1的属性,以改变它的外观,不管是设计时还是运行时。

图1-4

选中窗体上得richTextBox1,属性对话框中就自动显示它的所有属性。如图1-4,我们可以通过设置这几个布局属性来改变richTextBox1在窗体中的“位置形象”。看到了吗?我们所要调整的Dock属性,在属性对话框的下面有解释它的意义,不过你现在可能不明白“容器”是何方神圣,没有关系,阅读本书再结合帮助,还有你的实践应该就可以理解。
点击Dock属性项后面的下拉箭头,出现图1-5。这里用图像的方式让我们选择richTextBox1在窗体中的位置,比之有些开发工具的文字选择,又有一点进步。

图1-5


1.1.3 给应用程序添加菜单功能
界面设计还没有结束,我们还需要给程序添加两个简单的菜单项。

图1-6

如图1-6,我们点击mainMneu1图标后,可以依次输入“&F 文件”,“&O 打开…”和“&X 退出”。
这个时候,你可以按下F5,执行这个程序看看。你可以发现单击这个程序菜单项并没有任何反应。当然,我们还没有给这个菜单的单击事件添加任何代码呢。
解决的方法就是回到设计界面,比如在“退出”菜单项上双击,进入代码编写界面,如图1-7,在其中输入代码“Application.exit();”这样你再执行程序,就可以发现,至少“退出”命令,有了反应。

图1-7

软件沉思:Visual C#.net和Delphi一样,有了代码自动提示功能,当我们输入前面的代码到“Application.e”的时候,程序就基本上按字母顺序已经提示出我想书写的代码了。你仔细观察图1-7,Application对象的属性,事件和方法采用不同的图标表示,更多提示出了我们想要查找的成员。

1.1.4 调用标准对话框
到这个时候,程序还是很傻,稍微大一点的功能都没有,别着急,我们的程序至少还应该具有打开某个文本文件的供我们编辑的功能。
应用程序打开文件,就涉及到调用Windows标准对话框,所以,首先从工具箱中找到“OpenFileDialog”放到窗体上,你会发现它和MainMenu一样,出现在了窗体界面下,对象名默认叫opneFileDialo1。
为菜单项添加代码除了双击它之外还有一个办法,还有就是在属性对话框中,先选中menuItem2,也就是显示为“打开…”的菜单项,点选事件按钮,然后在Click项后面双击,表示要为“打开…”菜单编写Click事件代码。如图1-8。

图1-8

这里输入的代码也不复杂,一共两行:
 openFileDialog1.ShowDialog();
 richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
现在运行程序,你就可以把一些文本格式的应用程序调进来进行查看并编辑了。

1.1.5 别让右键空白
不过,这样简单的程序如何让人满意,至少有两点我不太满意:(1)我编辑的文件不能保存,这肯定不行,起不到编辑的效果;(2)使用任何一个编辑软件的时候我都常常使用右键菜单,这里面没有这个功能,不行。完成这两个功能,基本上就可以是一个简单的单文本编辑器了。
我们把这两个功能作为练习提供给读者,提示一下:要保存文件,必须要在打开文件的时候保存所打开文件的文件名,这样程序必须要添加一个string变量;要使用右件菜单,必须使用ContextMenu组件。
试试看,挑战自己。光盘或者出版社网站上有这个事例的完整代码。

1.2 前事不忘,后事之师:有经验的程序员也可能做错
在编写前面的代码的时候,我犯过最大的错误是想写这样两行代码:
 openFileDialog1.execute();
 richTextBox1.LoadFile(openFileDialog1.FileName);
这两行代码习惯都来自Delphi,特别是第二行,执行程序的时候突然中断,要不是我调试程序的经验老道,差点我的Visual C#处女航就要沉沙折戟。第一行我没有找到execute()方法,只好改用ShowDialog()方法,第二行及时借助了帮助,才编写了出来。可见,还是帮助好呀。
多年前,人们学习Windows的时候总结了一句话,没有DOS经验的是从零开始,有DOS经验的是从负数开始。是不是我以前的经验让我现在从负数开始了呢?

1.3 解析C#应用程序结构
虽然可以通过简单拖放编写程序,不过,要开发更大的程序,毕竟我们必须回到代码上来。
对刚刚开始的我们来说,熟悉C#的程序结构形式是必要的。

图1-9
如图1-9我们可以看大致的应用程序结构,我们下面逐一分析。

1.3.1 using namespace
整个应用程序包含在一个名字叫microEditor的 namespace中,这和我们以前碰到的unit(Delphi),还有C++的namespace都何等雷同。所以,一望就明白。
而程序开头的几个using 字句,和我们常用的#include有差不多相同的作用。当然还有和C++中namespace雷同德作用:让我们使用上面namespace中对象的时候,不必加很多前缀。
对于这两个关键字,第一次接触了解到这个程度也就足够了。

1.3.2 class、Main还有Application
和Java相同,C#程序的主要结构是class。我们前面所建构的应用程序,都包含在class Form1之中。里面所包含的成员和方法基本上也能明白他的意思,毕竟看起来和Delphi比较像。
不过*.DFM是不会有了,我看到Windows Form Designer generated code中有了大多数我们在Delphi的窗体设计文件中才有的内容。
我们展开代码,一个InitializeComponent()成员,完成了控件的初始化工作。一开始,我没有在其中发现事件和事件处理器相关联的代码,莫非,还在另外一个文件中隐藏着?仔细观察,原来在这里:this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);。
对于我来说,还有一些疑问:
 private System.ComponentModel.Container components = null;有什么作用?
base.Dispose( disposing );中的base关键字是和功能?和this有关系吗?或者说,有什么区别?
还有,下面代码虽然意义一望而知,可是[STAThread]这样的格式我还第一次碰到,我以前都只碰到没有参数的run()方法,今天开了眼界。
 [STAThread]
 static void Main()
 {
 Application.Run(new Form1());
 }

碰到这样的问题,我通过在疑问处按下F1,基本可以通过帮助解决问题,你不妨也试验试验。有时候,IDE甚至直接在我鼠标停留处给出简单提示,比如图1-10。

图1-10

1.4 小结WinForms组件库使用心得
就编写Windows Form应用程序而言,使用Visual C#和Delphi,VB之类没有大的区别。依然是拖放控件,设置属性,然后编写相关事件的处理代码。一旦编写的程序界面比较多,恐怕编写这些程序也将成为一个体力活,如果这些工作部分能够自动化就好了。
老一点的程序员已经接触过VCL,MFC等Application Frameworks,对比之下,.net Frameworks设计上确实上乘,感觉和VCL更接近,也许是我用得久了,感情上的想法吧。发展到今天的.net Frameworks,任何一个组件或者说对象的属性,方法,事件的数量都已经比较客观。虽然大多数使用默认效果就可以,不过,我觉得Visual C#的属性分类,以及在代码自动完成的时候给出属性,事件,方法的不同颜色和图像标记,如图1-11,对像我这样第一次使用C#编写程序的人来讲,还是很宜人的。

图1-11

1.5 练习:为microEditor添加新功能
这个编辑软件太简陋,好多功能都没有,请按照前面“1.1.5 别让右键空白”小节所说添加功能。需要提示的是,要保存文件,我们必须有前面所打开文件的文件名,不然保存到何处?所以,应用程序必然要添加一个全局变量。

有经验的程序员也可能做错:
1. 我想既然是全局变量,就把private string editFileName放到microEditor命名空间好了,没有想到,却出现:“编译器错误 CS0116命名空间并不直接包含诸如字段或方法之类的成员”。一看解释:“在 namespace 内,编译器只接受类、结构、联合、枚举、接口和委托。”看来我自作多情了,你犯这个错误了吗?
2. 在窗体设计的时候,很多地方的布尔设置为“True”或者“False”,结果我在编程的时候,把开始设计时候设置的菜单项的“Enabled”的结果由“False”改为“True”,没有想到程序一直不能通过编译。我记得很多书上说C#是自定义布尔变量的,为什么不能通过呢?赶紧翻书,原来是值应该是“true”,不是“True”。界面设计时候是为了满足我们的自然语言逻辑习惯。

1.6 我一直想弄明白
好了,一个简单的编辑软件算是做完了,可是,还是有一些问题让我边使用边学习的人思考:
1. 编译框中的提示是什么意思?
编译的时候,输出对话框会有一些文字,大多数可以理解,但比如:“DefaultDomain”:已加载“d:/winnt/microsoft.net/framework/v1.0.3705/mscorlib.dll”,未加载符号。
“microEditor”:已加载“D:/tmp/microEditor/bin/Debug/microEditor.exe”,符号已加载。
中的符号是指什么?
2. 为什么microEditor.exe只有8KB?
我到应用程序文件加下面观察有哪些文件,发现这个可执行文件异常的小,居然只有8KB,聪敏的读者,你知道是什么缘故吗?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值