<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[jianfeihua_剑飞花]]></title>
<link>http://blog.pfan.cn/jianfeihua</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[BPL调试诀窍]]></title>
		<link>http://blog.pfan.cn/jianfeihua/52653.html</link>
		<description><![CDATA[BPL包无法调试（设置断点）的问题,欢迎讨论


&nbsp; &nbsp;做开发不能调试实在是太痛苦了，忍了好久了
由于系统结构是Host主程序动态加载BPL包的模式。所以用到了Package的调试，但无论如何有一个包就是无法调试（加断点不起作用）。经过N久的查找，发现：
&nbsp; &nbsp; &nbsp;1.包Package在编译，生成的时候会自动产生DCP和BPL文件，缺省产生到DelphiProjectsBPL下。
&nbsp; &nbsp; &nbsp;2.BPL文件的生成路径可以在Project/Options/Directories中修改
&nbsp; &nbsp; &nbsp;3.多个Package联合调试时，最好把DCP生成在同一个路径下，并且在Tools/Invironment Options/Library的Library Path中添加。
&nbsp; &nbsp; &nbsp;4.调试时Delphi在Library中按从上到下的顺序搜索DCP文件，如果第一个搜索到的DCP和最新的源代码是配套的，会进入调试，否则不会进入调试。


&nbsp; &nbsp; &nbsp;经常遇到这样的问题：首先保存了一个包，顺手Build了一下，这时候生成的BPL和DCP都在DelphiProjectsBPL下。后来又改了Project中的DCP生成路径，生成到专门放DCP的文件夹。在后来的运行调试中，由于系统第一个会找到我生成到DelphiProjectsBPL下的那个没有任何功能的DCP，自然和我目前的BPL是不匹配的，所以就无法调试]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2011-07-01 09:48:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记开始继续更新]]></title>
		<link>http://blog.pfan.cn/jianfeihua/51529.html</link>
		<description><![CDATA[&nbsp;&nbsp; &nbsp; 6月换工作，从东莞跑到了上海。离家近多了，算是有点小开心吧。
工作暂时算稳定下了，可以挤出时间继续更新C#了。向追C#学习笔记的网友道歉，呵呵。]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-07-24 15:39:00</pubDate>
		</item>
				<item>
		<title><![CDATA[读一读Scktsrvr.exe的源程序]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50989.html</link>
		<description><![CDATA[使用DELPHI做多层开发的朋友们都应该对Scktsrvr.exe这个程序不陌生的，Borland公司在DELPHI中给出了它的源代码。这是一个900来行的程序，程序不算长，现在我只选其中部分仔细读一读。走的线路大致是，从服务器接到客户端连接，处理客户端的一个请求（这儿选了客户端向服务器发出的"取应用服务器列表"请求)
服务器接受了客户端连接后,因为ServerSocket采用的是阻塞模式,服务器执行了下面这个线程来服务客户端：
//SCKTMAIN.PAS
procedure TSocketDispatcherThread.ClientExecute;var&nbsp; Data: IDataBlock;&nbsp; msg: TMsg;&nbsp; Obj: ISendDataBlock;&nbsp; Event: THandle;&nbsp; WaitTime: DWord;begin&nbsp; CoInitialize(nil);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //初始化COM&nbsp; try&nbsp;&nbsp;&nbsp; Synchronize(AddClient);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在程序界面上显示客户信息,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用同步保证AddClient线程安全性&nbsp;&nbsp;&nbsp; FTransport := CreateServerTransport;&nbsp;&nbsp;&nbsp; try&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event := FTransport.GetWaitEvent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetInter]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-23 21:13:00</pubDate>
		</item>
				<item>
		<title><![CDATA[怎样在三层结构的系统中对应用程序服务器传出的数据压缩？]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50988.html</link>
		<description><![CDATA[转自：http://topic.csdn.net/t/20020708/15/858595.html我把图形文件(TiF格式)存放在SQl &nbsp; Server数据库中，当时我要在客户端取时速度很慢（3-4秒），我想通过实现IDataIntercept接口，来压缩图像,该怎样实现。 我不知道,不过delphi中有demo的.我想，如果你在客户端用了clientdataset，在服务端用了datasetprovider，那你可以在 &nbsp; datasetprovider的OnGetData事件中，对图像进行压缩，然后在ClientDataSet的AfterGetRecords事件中，对图像进行解压。你的想法不错，我觉得我的系统也可以用这样的方法提高效率，能不能告说我你准备用什么方式对数据进行压缩？也许我们可以继续交流一下？用IDataIntercept的方式也不错，有空我也研究一下。实现IDataIntercept的方法不错. &nbsp; &nbsp; 我做过,但只是用于SocketConnection.它只需要实现两个方法, &nbsp; &nbsp; 1,数据进, &nbsp; 在里面实现解压. &nbsp; &nbsp; 2,数据出, &nbsp; 在里面实现压缩. &nbsp; &nbsp; &nbsp; &nbsp; 理解了就简单,具体代码可以从DEMO改写.. &nbsp; 按下面的步骤，就可以了，不用去写代码，记住，它是内置的功能，只要如下配置即可。 &nbsp; &nbsp; 1: &nbsp; &nbsp; 准备工作,先delphi光盘中的\info\extras\zlib\zlib.pas进行编绎，然后copy &nbsp; 到lib路径中，因为要压缩数据，必须要有压缩功能，这个delphi已经自带，它是基于流的方式对接口IDataBlock(TDataBlock实现，其实就是对TMemoryStream的操作)数据进行压缩和解压的。做了这个后，才能进行下面的工作。 &nbsp; &nbsp; 2: &nbsp; &nbsp; Open &nbsp; \Demos\Midas\Intrcpt\Intrcpt.dpr &nbsp; &nbsp; &nbsp; complier.... &nbsp; &nbsp; 生成Intrcpt.dl]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-23 21:00:00</pubDate>
		</item>
				<item>
		<title><![CDATA[一份Delphi编写外挂源码示例]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50987.html</link>
		<description><![CDATA[unit Unit1;
interface
private { Private declarations } public { Public declarations } function KillTask(ExeFileName: string): Integer; end; const bsize=1024;
var Form1: TForm1; h_cal:hwnd;//窗口 hProc,xiel,xiel_tow:dword;//进程id s_proc:string;//进程id hProcess: Cardinal; query_thread_handle1: THandle; ac:Cardinal; ai_ga,ai_gb,id,y_id,baoh,baoha,baohb,timer_one:integer; bb:boolean;
implementation
{$R *.dfm} procedure Query(); stdcall; begin form1.timer1.Enabled:=true;
form1.timer3.Enabled:=true;
form1.timer7.Enabled:=true;
form1.timer8.Enabled:=true; form1.timer6.Enabled:=true; SendMessage(h_cal,WM_KEYDOWN,vk_tab,0); SendMessage(h_cal,WM_KEYUP,vk_tab,0); form1.sb1.Panels[0].Text:='发现怪物...开始攻击'; if form1.ck3.Checked=true then begin form1.timer6.Enabled:=false; end; if form1.ck4.Checked=true then begin form1.timer4.Interval :=strtoint(form1.edit4.Text)*1000; form1.timer5.Interval :=strtoint(form1.edit5.Text)*1000; form1.timer4.Enabled :=true; form1.timer5.Enabled :=true;
end; if form1]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-23 20:36:00</pubDate>
		</item>
				<item>
		<title><![CDATA[有穷自动机_1]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50967.html</link>
		<description><![CDATA[NFA(不确定的有限自动机)与DFA(确定的有限自动机)
DFA的定义：
&nbsp;&nbsp; 一个确定的有限自动机(DFA)M是一个五元组：M(S,∑,f,S0,Z)
&nbsp;&nbsp; S:代表一个有限状态集合。
&nbsp;&nbsp; ∑：代表一个字母表,它的每个元素称为一个输入字符。&nbsp;&nbsp; f：代表]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-20 21:34:00</pubDate>
		</item>
				<item>
		<title><![CDATA[正规文法转为正规式的规则]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50966.html</link>
		<description><![CDATA[正规式：也叫正则表达式，它是一种表达正规集的工具。一个正规式对应一个正规文法。
&nbsp;
正规文法转换成正规式：
&nbsp;
规则1：A→xB,B→y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A→xy
规则2：A→xA|y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A→x*y(*代表0到无穷个x)规则3：A→x,A→y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A→x|y]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-20 21:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[编译原理中的文法类型]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50964.html</link>
		<description><![CDATA[文法类型：
0型文法：对于推导式α→β,那么α∈(Vn∪Vt)*且至少含有一个非终结符，β∈(Vn∪Vt)*，则该推导式属于~。
1型文法：也叫上下文有关文法，此文法对应线性有界自动机。1型文法在0型文法的基础上满足|β|&gt;=|α|,则该推导式属于~。||代表长度。
2型文法：也叫上下文无关文法，它对应下推自动机。2型文法在1型文法的基础上满足推导式(α→β)的左侧都是非终结符。
3型文法：也叫正规文法，它对应有限状态自动机。它在2型文法的基础上满足A→a|aB(一个非终结符推导出一个终结符或一个终结符带一个非终结符。右线性)，A→a|Ba(左线性)。
|代表“或”的意思。]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-20 19:59:00</pubDate>
		</item>
				<item>
		<title><![CDATA[堆排序]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50937.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp; 什么是堆？
&nbsp;&nbsp;&nbsp; 堆是以完全二叉树形式存储的一组数据。
堆排序步骤
1、建立堆
&nbsp;&nbsp;&nbsp; 用层次遍历的方式将一组数值构建成一棵树。
2、调整堆
&nbsp;&nbsp;&nbsp;&nbsp; 刚建立的树是未完成排序的，需要对构建好的树进行调整。这里需要先了解2个概念：
&nbsp;&nbsp;&nbsp;&nbsp; 大顶堆，小顶堆。
&nbsp;&nbsp;&nbsp;&nbsp; 什么是大顶堆、小顶堆呢？如果我们用层次遍历的方式从数值1开始依次对第一步建成的树的顶点给一个标号的话，那么大顶堆需要满足以下条件：1号顶点的值&gt;=2号顶点的值&gt;=3号顶点的值，如果顶点的标号用变量i表示的话可推导出以下公式：i&gt;=2i&gt;=2i+1。小顶堆则刚好相反，可表示为i&lt;=2i&lt;=2i+1。
&nbsp;&nbsp;&nbsp; 虽然明白了上面的定义，但是现在还是不能下手对第一步构建的树进行调整。因为上面的定义只告诉了我们排序完成后的堆是什么样子的，还差了一把让我们动手的钥匙。
&nbsp;&nbsp;&nbsp; 现在让我们来分析一下这把钥匙是什么？一个完全二叉树有以下特性：顶点总数/2+1的顶点是叶子节点，而且由于树的存储结构是单向的，叶子节点没有指向父节点的指针。所以要比较节点值大小的话一定要从一个父节点开始。如果一棵树的节点数为n的话，那我们就应该从n/2号顶点开始比较。但是假如n是一个奇数呢？那我们就直接取整。至于原因大家画一个5或9个节点的树分析一下就知道了。
&nbsp;&nbsp; 好了正式动手，按大顶堆排序调整这棵树吧。方法如下：
&nbsp;&nbsp;&nbsp; 1、假如有该父节点只有一个孩子节点，且父节点值&gt;孩子节点。不用调整
&nbsp;&nbsp;&nbsp;&nbsp;2、假如有该父节点只有一个孩子节点，且父节点值&lt;孩子节点。值互换
&nbsp;&nbsp;&nbsp; 3、假如有该父节点有两个孩子节点，且父节点值&gt;2个孩子节点。不用调整
&nbsp;&nbsp;&nbsp;&nbsp; 4、假如有该父节点有两个孩子节点，且父节点值&lt;2个孩子节点。和最大值的孩子]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-15 22:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[常用内部排序算法及分类]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50936.html</link>
		<description><![CDATA[1、插入排序(直接插入，希尔排序)
2、选择排序(简单选择，堆排序)
3、交换排序(冒泡，快速排序)
4、归并排序
5、基数排序]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-15 21:19:00</pubDate>
		</item>
				<item>
		<title><![CDATA[AOE网，关键路径]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50930.html</link>
		<description><![CDATA[边带权值的AOV网称为AOE网。
关键路径的重要概念：
1、顶点j事件的最早发生时间：从源点到顶点J的最长路径长度。记做：Ve(j)
2、活动ai的最早开始时间：顶点j的出度所代表的活动ai的最早开始时间等于j的最早发生时间。记做：e(i)
3、顶点j事件的最迟发生时间：在不推迟整个工程完工的前提下，事件j允许最迟的发生时间。记做：Vl(j)
4、活动ai的最迟开始时间：Vl(j)-(ai所需时间),就是活动ai的最迟开始时间。记做：l(i)]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-14 22:14:00</pubDate>
		</item>
				<item>
		<title><![CDATA[AOV网和拓扑排序]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50929.html</link>
		<description><![CDATA[把用顶点表示活动有向边表示活动之间开始的先后关系的有向图，简称为AOV网。
拓扑排序，是求拓扑序列 的过程。
过程如下：
1、先找到图中入度为零的顶点
2、完成该活动后删除代表该活动顶点的所有出度，然后继续找入度为零的顶点。
3、拓扑序列不是唯一的。]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-14 21:17:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#中调用DTS]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50917.html</link>
		<description><![CDATA[c#中调用DTSDTS是sql server里很好用的一样东西，用它来做信息系统的数据导入，是再合适不过了。但是sql server中的DTS毕竟只有数据库开发人员才会调用，运营人员不懂数据库知识，只能写个调DTS的程序给他们用。网上也有一些文章讲调用DTS的，不过大多是用DTSRun.exe，那么如何在代码里调呢？首先引用Microsoft DTSPackage Object Library代码是很简单的：

1private&nbsp;void&nbsp;RunDTS()2&nbsp;&nbsp;{3&nbsp;&nbsp;&nbsp;DTS.Package2Class&nbsp;package&nbsp;=&nbsp;new&nbsp;Package2Class();4&nbsp;&nbsp;&nbsp;object&nbsp;p&nbsp;=&nbsp;null;5&nbsp;&nbsp;&nbsp;package.LoadFromSQLServer("ws-victor-03",&nbsp;null,&nbsp;null,&nbsp;DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection,6&nbsp;&nbsp;&nbsp;&nbsp;null,&nbsp;null,&nbsp;null,&nbsp;"TestDTS",&nbsp;ref&nbsp;p);7&nbsp;&nbsp;&nbsp;package.Connections.Item(1).DataSource&nbsp;=&nbsp;"dts.XLS";8&nbsp;&nbsp;&nbsp;package.Execute();9&nbsp;&nbsp;}
&nbsp;
&nbsp;
转自City of David]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-10 15:18:00</pubDate>
		</item>
				<item>
		<title><![CDATA[windows控件学习完毕，因考试停更2个月]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50881.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp; 5月考软设，C#暂停学习。
&nbsp;&nbsp;&nbsp; 读者大人们保佑我通过吧。呵呵。]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-02 19:22:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_26]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50878.html</link>
		<description><![CDATA[二十六、实战图片框，计时器1、新建Windows窗体应用程序，取名ChangeBackground。2、拖放PictureBox、ImageList、Timer三个控件到窗体上，设置如下属性：控件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值PictureBox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;picBackground&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-02 15:50:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_25]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50877.html</link>
		<description><![CDATA[二十五、图片框、图片列表和计时器
1、图片框PictureBox属性&nbsp;说明Image&nbsp;图片框显示的图像SizeMode&nbsp;指定图像显示格式参考前缀&nbsp;pic3、&nbsp;图片列表ImageList属性&nbsp;说明Images&nbsp;图片列表ImageSize&nbsp;图片显示大小TransparentColor&nbsp;透明参考前缀&nbsp;Iml4、&nbsp;计时器Timer属性&nbsp;说明Interval&nbsp;事件发生频率，单位毫秒Enabled&nbsp;是否定时引发事件事件&nbsp;说明Tick&nbsp;在指定间隔发生的事件方法&nbsp;说明Start()&nbsp;启动计时器Stop()&nbsp;停止计时器参考前缀&nbsp;tim]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-02 15:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_24]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50876.html</link>
		<description><![CDATA[二十四、选项卡控件TabControl1、&nbsp;MultiLine属性是否显示多行选项卡2、&nbsp;TabPages属性选项卡页集合3、&nbsp;SelectedIndex属性选项卡页的索引值。4、&nbsp;参考前缀名TabControl：tabtabPage：tpg]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-02 15:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_23]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50857.html</link>
		<description><![CDATA[二十三、状态栏和工具栏。
1、&nbsp;状态栏StatusStrip，工具栏ToolStrip共同属性
ImageScalingSize：工具栏或状态栏中的项显示图像的大小。
Items：工具条或状态条项的集合。
2、&nbsp;小技巧，将放置在工具栏或状态栏上的控件转换为另外的控件。
在控件项上右击，在弹出菜单上选择“转换为”
&nbsp;]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-01 09:25:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_22]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50856.html</link>
		<description><![CDATA[二十二、在MDI父窗体上显示MDI子窗体列表
1、&nbsp;打开上例工程。
2、&nbsp;在MenuStrip控件新增“windows”菜单项，Name属性设置为mmiWindows。
3、&nbsp;重新点选MenuStrip控件，设置MdiWindowListItem属性值为mmiWindows。
4、&nbsp;F6,F5执行程序，单击ShowChild菜单再看windows菜单。呵呵，是不是很简单。
&nbsp;]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-04-01 08:40:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#学习笔记_21]]></title>
		<link>http://blog.pfan.cn/jianfeihua/50854.html</link>
		<description><![CDATA[二十一、MDI程序1、&nbsp;重要属性：Form属性：IsMdiContainer&nbsp;&nbsp; 属性值：True,FalseTrue：指定该窗体为MDI父窗体。一个Application只可有一个MDI父窗体。False：普通窗体
Form属性：MDIParent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性值：父窗体对象
2、&nbsp;ExampleA、&nbsp;新建Windows窗体应用程序，取名MDIExampleB、&nbsp;右击解决方案，选“添加”→“windows窗体”,取名Child1C、&nbsp;拖MenuStrip控件放到Form上，并新建菜单File→ShowChildD、&nbsp;双击ShowChild输入下列代码：
Child1 Child1 = new Child1();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Child1.MdiParent = this;&nbsp;&nbsp;&nbsp; Child1.Show();3、F6,F5运行看看吧。呵呵]]></description>
		<author><![CDATA[jianfeihua]]></author>
		<pubDate>2010-03-31 18:09:00</pubDate>
		</item>
		</channel>
</rss>