??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲视频一区在线观看,久久精品国产亚洲AV电影,亚洲不卡无码av中文字幕http://m.tkk7.com/zqli/category/12937.html为学日益Qؓ(f)道日损?/description>zh-cnThu, 17 Jan 2008 15:03:20 GMTThu, 17 Jan 2008 15:03:20 GMT60[转]C#泛型~程 http://m.tkk7.com/zqli/archive/2008/01/17/175983.html放水老?/dc:creator>放水老?/author>Thu, 17 Jan 2008 08:17:00 GMThttp://m.tkk7.com/zqli/archive/2008/01/17/175983.htmlhttp://m.tkk7.com/zqli/comments/175983.htmlhttp://m.tkk7.com/zqli/archive/2008/01/17/175983.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/175983.htmlhttp://m.tkk7.com/zqli/services/trackbacks/175983.html泛型Q通过参数化类型来实现在同一份代码上操作多种数据cd。利?#8220;参数化类?#8221;类型抽象化Q从而实现灵zȝ复用?/span>

Program

static void Main(string[] args)

int obj = 2;

Test<int> test = new Test<int>(obj);

Console.WriteLine("int:" + test.obj);

string obj2 = "hello world";

Test<string> test1 = new Test<string>(obj2);

Console.WriteLine("String:" + test1.obj);

Console.Read();

class Test<T>

public T obj;

public Test(T obj)

this.obj = obj;

输出l果是:(x)

Test如果T被实例化为int型,那么成员变量obj是int型的Q如果T被实例化为string型,那么obj是stringcd的?/span>

Ҏ(gu)不同的类型,上面的程序显C出不同的倹{?/span>

泛型机制Q?/span>

泛型能力有CLR在运行时支持QC#泛型代码在编译ؓ(f)IL代码和元数据Ӟ采用Ҏ(gu)的占位符来表C型类型,q用专有的IL指o(h)支持泛型操作。而真正的泛型实例化工作以“on-demand”的方式,发生在JIT~译时?/span>

.method private hidebysig static void Main(string[] args) cil managed

{

 .entrypoint

 // Code size       79 (0x4f)

 .maxstack 2

 .locals init ([0] int32 obj,

           [1] class CSharpStudy1.Test`1<int32> test,

           [2] string obj2,

           [3] class CSharpStudy1.Test`1<string> test1)

 IL_0000: nop

 IL_0001: ldc.i4.2

 IL_0002: stloc.0

 IL_0003: ldloc.0

 IL_0004: newobj     instance void class CSharpStudy1.Test`1<int32>::.ctor(!0)

 IL_0009: stloc.1

 IL_000a: ldstr      "int:"

 IL_000f: ldloc.1

 IL_0010: ldfld      !0 class CSharpStudy1.Test`1<int32>::obj

 IL_0015: box        [mscorlib]System.Int32

 IL_001a: call       string [mscorlib]System.String::Concat(object,

                                                              object)

 IL_001f: call       void [mscorlib]System.Console::WriteLine(string)

 IL_0024: nop

 IL_0025: ldstr      "hello world"

 IL_002a: stloc.2

 IL_002b: ldloc.2

 IL_002c: newobj     instance void class CSharpStudy1.Test`1<string>::.ctor(!0)

 IL_0031: stloc.3

 IL_0032: ldstr      "String:"

 IL_0037: ldloc.3

 IL_0038: ldfld      !0 class CSharpStudy1.Test`1<string>::obj

 IL_003d: call       string [mscorlib]System.String::Concat(string,

                                                              string)

 IL_0042: call       void [mscorlib]System.Console::WriteLine(string)

 IL_0047: nop

 IL_0048: call       int32 [mscorlib]System.Console::Read()

 IL_004d: pop

 IL_004e: ret

} // end of method Program::Main

    .method public hidebysig specialname rtspecialname

        instance void .ctor(!T obj) cil managed

{

 // Code size       17 (0x11)

 .maxstack 8

 IL_0000: ldarg.0

 IL_0001: call       instance void [mscorlib]System.Object::.ctor()

 IL_0006: nop

 IL_0007: nop

 IL_0008: ldarg.0

 IL_0009: ldarg.1

 IL_000a: stfld      !0 class ConsoleCSharpTest1.Test`1<!T>::obj

 IL_000f: nop

 IL_0010: ret

} // end of method Test`1::.ctor

、第一轮编译时Q编译器只ؓ(f)Test<T>cd产生“泛型?#8221;的IL代码与元数据——ƈ不进行泛型的实例化,T在中间只充当占位W。例如:(x)Testcd元数据中昄?lt;!T>

、JIT~译Ӟ当JIT~译器第一ơ遇到Test<int>Ӟ用int替换“范型?#8221;IL代码与元数据中的T——进行泛型类型的实例化。例如:(x)Main函数中显C的<int>

、CLR为所有类型参Cؓ(f)“引用cd”的泛型类型生同一份代码;但是如果cd参数?#8220;值类?#8221;Q对每一个不同的“值类?#8221;QCLRؓ(f)其生一份独立的代码。因为实例化一个引用类型的泛型Q它在内存(sh)分配的大是一L(fng)Q但是当实例化一个值类型的时候,在内存(sh)分配的大是不一L(fng)?/span>

泛型特点Q?/span>

、如果实例化泛型cd的参数相同,那么JIT~辑器会(x)重复使用该类型,因此C#的动态泛型能力避免了(jin)C++?rn)态模板可能导致的代码膨胀的问题?/span>

、C#泛型cd携带有丰富的元数据,因此C#的泛型类型可以应用于强大的反技术?/span>

、C#的泛型采?#8220;基类、接口、构造器Q值类?引用cd”的约束方式来实现对类型参数的“昄U束”Q提高(sh)(jin)cd安全的同Ӟ也׃(jin)C++模板Z“{֐”的隐式约束所h的高灉|?/span>

泛型l承Q?/span>

除了(jin)可以单独声明泛型cdQ包括类与结构)(j)外,也可以在基类中包含泛型类型的声明。但基类如果是泛型类Q它的类型要么以实例化,要么来源于子c(同样是泛型类型)(j)声明的类型参敎ͼ看如下类?/span>

非法

cd为Ccd提供?jin)U、VQ也是上面说的来源于子c?/span>

cdl承于C<string,int>Q个为可以看成Fl承一个非泛型的类

cd为非法的Q因为Gcd不是泛型QC是泛型,G无法lC(j)提供泛型的实例化

 

、C#泛型机制只支?#8220;在方法声明上包含cd参数”——即泛型Ҏ(gu)?/span>

、C#泛型机制不支持在除方法外的其他成员(包括属性、事件、烦(ch)引器、构造器、析构器Q的声明上包含类型参敎ͼ但这些成员本w可以包含在泛型cd中,q用泛型类型的cd参数?/span>

、泛型方法既可以包含在泛型类型中Q也可以包含在非泛型cd中?/span>

Ҏ(gu)是合法的Q约束被默认l承

Ҏ(gu)是非法的Q指定Q何约束都是多余的

、C#泛型要求?#8220;所有泛型类型或泛型Ҏ(gu)的类型参?#8221;的Q何假定,都要Z“昑ּ的约?#8221;Q以l护C#所要求的类型安全?/span>

?#8220;昑ּU束”由where子句表达Q可以指?#8220;基类U束”Q?#8220;接口U束”Q?#8220;构造器U束”Q?#8220;值类?引用cdU束”共四U约束?/span>

?#8220;昑ּU束”q必须Q如果没有指?#8220;昑ּU束”Q范型类型参数将只能讉KSystem.Objectcd中的公有Ҏ(gu)。例如:(x)在开始的例子中,定义的那个obj成员变量。比如我们在开始的那个例子中加入一个Test1c,在它当中定义两个公共Ҏ(gu)Func1、Func2Q如下图Q?/span>



下面开始分析这些约束:(x)

A

public void Func1()

class B

public void Func2()

class C<S, T>

where S : A

where T : B

public C(S s,T t)

//S//T IA<T>

interface IB

void Func2();

interface IC<T>

class MyClass<T, V>

where T : IA<T>

where V : IB, IC<V>

public MyClass(T t,V v)

//T//V A

public A()

class B

public B(int i)

class C<T> where T : new()

public C()

new T();

class D

public void Func()

C<A> c = new C<A>();

对象在编译时报错QThe type B must have a public parameterless constructor in order to use it as parameter 'T' in the generic type or method C<T>

注意QC#现在只支持无参的构造器U束

此时׃我们为Bcd写入?jin)一个有参构造器Q得系l不?x)再为B自动创徏一个无参的构造器Q但是如果我们将Bcd中加一个无参构造器Q那么对象d的实例化׃?x)报错?jin)。Bcd定义如下Q?/span>

classB

public B()

public B(int i)

struct A { }

public class B { }

public class C<T> where T : struct

C<A> c1 = new C<A>();

C<B> c2 = new C<B>();

对象在编译时报错QThe type 'B' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or methor 'C<T>'

、C#的泛型能力由CLR在运行时支持Q它既不同于C++在编译时所支持的静(rn)态模板,也不同于Java在编译器层面使用“擦拭?#8221;支持的简单的泛型?/span>

、C#的泛型支持包括类、结构、接口、委托四U泛型类型,以及(qing)Ҏ(gu)成员?/span>

、C#的泛型采?#8220;基类Q接口,构造器Q值类?引用cd”的约束方式来实现对类型参数的“昑ּU束”Q它不支持C++模板那样的基于签名的隐式U束?/span>



]]>
[转]ASP.net?名称以无效字W开?问题解决? http://m.tkk7.com/zqli/archive/2008/01/07/173459.html放水老?/dc:creator>放水老?/author>Mon, 07 Jan 2008 14:11:00 GMThttp://m.tkk7.com/zqli/archive/2008/01/07/173459.htmlhttp://m.tkk7.com/zqli/comments/173459.htmlhttp://m.tkk7.com/zqli/archive/2008/01/07/173459.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/173459.htmlhttp://m.tkk7.com/zqli/services/trackbacks/173459.html

无法昄 XML c(din)?

使用 XSL 样式表无法查?XML 输入。请更正错误然后单击 h按钮Q或以后重试?


名称以无效字W开头。处理资?'http://localhost/likong/' 时出错。第 1 行,位置: 2

<%@ Page language="c#"  ValidateRequest="false"  Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="Socut.Cla...

 


q是怎么回事?以前怎么没遇到过?l查阅资料后才知?q是因ؓ(f)NET没用注册到IIS引v?原来早两天我重装VS.NET把IISq原?
在命令窗口中q行"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i"问题得以解决.


.NetFramework2.0Q需要运行的是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i。末"i"不能?

]]>
关于水晶报表讄横向或纵向打印的问题Q?/title><link>http://m.tkk7.com/zqli/archive/2007/10/26/156155.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Fri, 26 Oct 2007 07:10:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/10/26/156155.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/156155.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/10/26/156155.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/156155.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/156155.html</trackback:ping><description><![CDATA[       水晶报表10Q在设计完rpt报表文g以后Q设|了(jin)打印方向Q,直接调用PrintToPrinter(*,*,*,*)Ҏ(gu)Q要?br /> <br /> 先保存(sh)ؓ(f).pdf文gQƈ不能很好的实现直接打印?br /> <br />         其次Q如果将rpt文g赋给一个CrystalReportView后,当直接点?yn)L印按钮时Q弹出的打印对话框默认打?br /> <br /> rpt设计时的U张打印方向。而如果通过调用CrystalReportView.PrintReport()Ҏ(gu)Q弹出的打印对话框默认打?br /> <br /> 却是本机默认打印机的默认U张打印方向。据UͼPrintReport()Ҏ(gu)首先是d打印机默认的讄先?br /> <br />          因此Q想不浏览报表数据,直接调用打印Q又要按自己的横向或U向打印q个问题Q似乎很隑ֈ用报?br /> <br /> 本n的库来解冟뀂难道,只能通过先用代码Q修Ҏ(gu)印机的纸张打印方向,然后再调用PrintReport()Ҏ(gu)??br /> <br /> 的没有更好的解决办法Q?br /> <img src ="http://m.tkk7.com/zqli/aggbug/156155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-10-26 15:10 <a href="http://m.tkk7.com/zqli/archive/2007/10/26/156155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataView取RowFilterqo(h)之后的记?/title><link>http://m.tkk7.com/zqli/archive/2007/10/26/156153.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Fri, 26 Oct 2007 07:00:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/10/26/156153.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/156153.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/10/26/156153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/156153.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/156153.html</trackback:ping><description><![CDATA[<br /> <p>删除用RowFilter{选之后的记录集,用While循环是可以做到的Q而用For循环却不行?br /> <br /> While(dataView.count>0)<br /> {<br />   dataView.Delete(this.dataView.Count-1)<br /> //....<br /> }<br /> 因此Q除?jin)通过数据l定到DataGridView,DataGrid外,可以通过循环来取l过RowFilter{选后的记录集Q?br /> Ҏ(gu)有很多,如:(x)</p> <p> foreach (DataRowView row in dataView)<br /> {<br />    MessageBox.Showrow.Row[4].ToString());<br /> }</p> <img src ="http://m.tkk7.com/zqli/aggbug/156153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-10-26 15:00 <a href="http://m.tkk7.com/zqli/archive/2007/10/26/156153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用TextObject动态更Ҏ(gu)晶报表打印标?/title><link>http://m.tkk7.com/zqli/archive/2007/10/25/155800.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Thu, 25 Oct 2007 02:56:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/10/25/155800.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/155800.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/10/25/155800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/155800.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/155800.html</trackback:ping><description><![CDATA[       分步Q?br />    <br />        1、在rpt报表文g中,从工L(fng)里拖入一个TextObject控g到目标位|,可以讄相关属性?br />            比如Q定义了(jin)一个TextObject控gQ名?title?br /> <br />        2、在要ؓ(f)该TextObject赋值的class里加入如下代码:(x)<br />      <br />         using CrystalDecisions.CrystalReports.Engine;<br />         using CrystalDecisions.Shared;<br /> <br /> <br />          Report.StyleAreport aReport=new Special.Report.StyleAreport();//实例化报表文件rpt<br />          TextObject title = (TextObject)aReport.ReportDefinition.ReportObjects["title"];//扑ֈ刚定义的TextObject控g<br />          title.Text ="动态标?; <img src ="http://m.tkk7.com/zqli/aggbug/155800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-10-25 10:56 <a href="http://m.tkk7.com/zqli/archive/2007/10/25/155800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataTable.Compute(expression ,filter)解决Count(),Sum()......http://m.tkk7.com/zqli/archive/2007/10/20/154463.html放水老?/dc:creator>放水老?/author>Sat, 20 Oct 2007 03:19:00 GMThttp://m.tkk7.com/zqli/archive/2007/10/20/154463.htmlhttp://m.tkk7.com/zqli/comments/154463.htmlhttp://m.tkk7.com/zqli/archive/2007/10/20/154463.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/154463.htmlhttp://m.tkk7.com/zqli/services/trackbacks/154463.html最qؓ(f).NET目~码Qؓ(f)?jin)少写代码,直接用DataSet,DataTable{现成微软封装好的组Ӟ对于Sum()、Count(){计,DataTable提供?jin)配套的?gu)Founction Compute():




DataTable.Compute Ҏ(gu)
2007-03-22 17:53
.
DataTable.Compute Ҏ(gu)  

计算用来传递筛选条件的当前行上的给定表辑ּ?

命名I间:System.Data
E序?System.DataQ在 system.data.dll 中)(j)


Visual BasicQ声明)(j)
Public Function Compute ( _
                 expression As String, _
                 filter As String _
            ) As Object
            
Visual BasicQ用法)(j)
Dim instance As DataTable
            Dim expression As String
            Dim filter As String
            Dim returnValue As Object
            returnValue = instance.Compute(expression, filter)
            
C#
public Object Compute (
                string expression,
                string filter
            )
            
C++
public:
            Object^ Compute (
                 String^ expression,
                 String^ filter
            )
            
J#
public Object Compute (
                 String expression,
                 String filter
            )
            
JScript
public function Compute (
                 expression : String,
                 filter : String
            ) : Object
            

 

参数

expression

要计的表达式?

filter

要限制在表达式中q行计算的行的筛选器?

 

 

q回?/h4> ObjectQ设|ؓ(f)计算l果?

备注

expression 参数需要聚合函数。例如,以下是合法表辑ּQ?/p>

Count(Quantity)

但是以下表达式不合法Q?/p>

Sum (Quantity * UnitPrice)

如果必须针对两列或多列执行操作,则应该创?DataColumnQƈ它?Expression 属性设|ؓ(f)适当的表辑ּQ然后针对结果列使用聚合表达式。在q种情况下,假定有一个名?#8220;total”?DataColumnQƈ?Expression 属性设|ؓ(f)Q?

"Quantity * UnitPrice"

Compute Ҏ(gu)的表辑ּ参数ؓ(f)Q?

Sum(total)

W二个参?filter 定在表辑ּ中用哪些行。例如,如果该表包含名ؓ(f)“colDate”的日期列Q则可用以下表达式限制这些行Q?/p>

colDate > 1/1/99 AND colDate < 17/1/99

有关两个参数创徏表达式的规则Q请参见 DataColumn.Expression 属性?/p>

下面的示例针对识别号码ؓ(f)五的销售h员,对名?#8220;Total”Q合计)(j)的列的值求和?/p>

Visual Basic
Private Sub ComputeBySalesSalesID(ByVal dataSet As DataSet)
                ' Presumes a DataTable named "Orders" that has a column named "Total."
                Dim table As DataTable
                 table = dataSet.Tables("Orders")
                ' Declare an object variable.
                Dim sumObject As Object
                 sumObject = table.Compute("Sum(Total)", "EmpID = 5")
            End Sub
            
C#
private void ComputeBySalesSalesID(DataSet dataSet)
{
    // Presumes a DataTable named "Orders" that has a column named "Total."
     DataTable table;
     table = dataSet.Tables["Orders"];

    // Declare an object variable.
     object sumObject;
     sumObject = table.Compute("Sum(Total)", "EmpID = 5");


]]>
一个初学C#时的错误http://m.tkk7.com/zqli/archive/2007/10/12/152312.html放水老?/dc:creator>放水老?/author>Fri, 12 Oct 2007 05:14:00 GMThttp://m.tkk7.com/zqli/archive/2007/10/12/152312.htmlhttp://m.tkk7.com/zqli/comments/152312.htmlhttp://m.tkk7.com/zqli/archive/2007/10/12/152312.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/152312.htmlhttp://m.tkk7.com/zqli/services/trackbacks/152312.html
半天Q把label转换为Button控gcdQ问题解冟?

]]>
用VS2005制作WinForm安装?/title><link>http://m.tkk7.com/zqli/archive/2007/06/26/126431.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Tue, 26 Jun 2007 14:36:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/06/26/126431.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/126431.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/06/26/126431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/126431.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/126431.html</trackback:ping><description><![CDATA[<p>一.<br><br>1. 在现有项目的解决Ҏ(gu)中添加新的项? 叛_"解决Ҏ(gu)",选择"d"--"新徏目", ?d新项?的选择H口? "目cd"?其他目cd"--"安装和部|?,"模板"?安装目",l新目指定名称,位置;<br>2. 在新d的安装项目上叛_, 选择"视图"--"文gpȝ", 叛_"目标计算Z的文件系l?作侧?应用E序文g?, 选择"d文g"或?d目输出",你要安装的文gd到该位置;<br>3. 初始的安装位|? 在上面的"文gpȝ"界面, 左击"应用E序文g?, ?属?栏中扑ֈ"DefaultLocation", 默认的属性值是: [ProgramFilesFolder][Manufacturer]\[ProductName], q就是用户安装的默认位置, 如果不是q样, 修改成这? <br>4. 另外, ?解决Ҏ(gu)理?? 点击你添加的安装目, ?属?~辑栏中, 在[Manufacturer]中填入你公司的名字或者你自己希望的文? 在[ProductName]填入你ؓ(f)要被安装的项目命名的名字.<br>5. 先在"解决Ҏ(gu)理??生成"你的目, 然后"生成"你的安装目<br>6. ?解决Ҏ(gu)理??叛_你的安装目, 选择"安装", 便可在你的开发机上进行安装了(jin), 在你的安装项目的路径下的bin下有两个文g? debug ?nbsp;Release, <br>7. 在解x(chng)案管理器?叛_你的安装目, 选择"属?, 如果你的目属性里选择的是 "配置" ?nbsp;"debug", 则你生成的安装文件在 debug 里面, 如果选择?配置"?nbsp;"Release", 则生成的安装文g?nbsp;Release 里面. 当然你也可以修改你的位置可文件名, q可以对你的安装文gq行其它的设|?<br><br>?<br>在解x(chng)案管理器? 叛_d?安装目", 选择"视图"--"注册?; </p> <p> </p> <p>?目标计算Z的注册表"?默认有注册表的五个主键栏;<br>默认情况? ?nbsp;[HKEY_CURRENT_USER] ?nbsp;[HKEY_CURRENT_MACHINE] 下会(x)?nbsp;[Software]\[Manufacturer] 分支, 如果你的安装目的属性中讄?nbsp;[Manufacturer]? 安装后会(x)用值去替代[Manufacturer], 例如 [Manufacturer] 的?nbsp;讄?nbsp;"Power Word", 则安装后?x)?nbsp;[Software]下创Z个[Power Word]分支;<br>默认情况?nbsp;[Manufacturer] ?nbsp;AlwaysCreate 属性是 false, ?如果你的 [Manufacturer] 下没有项?则不创徏 [Manufacturer] ,如果无论如何都要创徏q个? 则可?nbsp;它的 AlwaysCreate 讄?nbsp;true;<br>依照上面的方? 在你惛_注册表项的主键中逐新徏分支和目, 在新建的注册表项目上叛_后选属? 讄注册的 value ?<br>无论是徏主键分支q是目, 都可以用 [] 的方法用系l变量来动态指定需要添加的注册表内? 例如:<br>[Manufacturer] 存放的是安装目的公司?<br>[ProductName] 存放的是安装目属性中?nbsp;产品名称,<br>[TARGETDIR] 存放的是安装时用户选定的安装\?<br>[COMPANYNAME] 存放的是安装时用户填入的公司?如果没设用户信息安装界面则取操作pȝ中的公司?,<br>[USERNAME] 存放的是安装时用户填入的用户?如果没设用户信息安装界面则取操作pȝ中的用户?<br>如此{等<br><br>如果惌在安装时出现注册? 要么自己做一个DLL或者EXE目, 加入?nbsp;自定义操作中在安装时打开界面输入注册? 要么使用VS安装目自带的界?在视?-用户界面中添?用户信息"安装界面,讄showserialnumber ?nbsp;true), 不过那个注册码是?nbsp;? 来验证的, 只要是验证位数g和能?整除都能通过, 像以前安装盗板 office 97 时输?nbsp;"1111111"一?<br></p> <img src ="http://m.tkk7.com/zqli/aggbug/126431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-06-26 22:36 <a href="http://m.tkk7.com/zqli/archive/2007/06/26/126431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]轻而易举拥有xp风格的界?http://m.tkk7.com/zqli/archive/2007/06/26/126273.html放水老?/dc:creator>放水老?/author>Tue, 26 Jun 2007 02:16:00 GMThttp://m.tkk7.com/zqli/archive/2007/06/26/126273.htmlhttp://m.tkk7.com/zqli/comments/126273.htmlhttp://m.tkk7.com/zqli/archive/2007/06/26/126273.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/126273.htmlhttp://m.tkk7.com/zqli/services/trackbacks/126273.htmlq篇文章主要参考了(jin)http://www.codeproject.com/csharp/dotnetvisualstyles.asp
跟随下面的步骤,使?zhn)的程序拥有XP风格的界?GO!
1. 新徏一个Windows应用E序Q然后打开AssemblyInfo.csQ修改一下内容,下面的是CZ代码Q?br>using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("abc")]
[assembly: AssemblyDescription("abc")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
2. 往目d新项。新d一个XML文gQ将文g命名?[(zhn)的E序名].exe.manifestQ[(zhn)的E序名]指的是在 ..\bin\debug 文g多w生成的可执行E序?。文件的内容CZ如下Q?zhn)只要?gu)(zhn)在AssemblyInfo.cs里所作的讄修改 version="1.0.0.0", name="abc", abc q几个值就可以?jin)?/td>

xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
version="1.0.0.0"
processorArchitecture="X86"
name="abc"
type="win32" />
abc


type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*" />



重新~译E序?注意Q从ButtonBase,GroupBox和Labell承下来的组件必dFlatStyle属性设为System?br>3. ?[(zhn)的E序名].exe.manifest 文gd到程序的可执行文?br>Q?Q菜单文件打开Q打开..\bin\debug\[(zhn)的E序名].exeQ现在?zhn)可以看到一个资源浏览树(wi)Q?br>Q?Q右?yn)L目录[(zhn)的E序名]Q单?d资源..."Q?br>Q?Q在跛_的对话框中单?#8220;自定?..”Q?br>Q?Q将资源cd命名为RT_MANIFESTQ确定;
Q?Q双击资源树(wi)的RT_MANIFEST下的(一般情况下?01Q,Copy 文g [(zhn)的E序名].exe.manifest 的内容,_脓(chung)在打开的文件中Q粘贴的l果是二q制形式Q结果有点奇怪,不用理会(x)Q?/font>


]]>
[转]Skin++ For C#.Net2005使用帮助http://m.tkk7.com/zqli/archive/2007/06/26/126253.html放水老?/dc:creator>放水老?/author>Tue, 26 Jun 2007 01:41:00 GMThttp://m.tkk7.com/zqli/archive/2007/06/26/126253.htmlhttp://m.tkk7.com/zqli/comments/126253.htmlhttp://m.tkk7.com/zqli/archive/2007/06/26/126253.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/126253.htmlhttp://m.tkk7.com/zqli/services/trackbacks/126253.html一、概q?/span>

       Skin++是一N用的Y件换肤套Ӟ目前支持各种版本操作pȝQ?/span>Windows9x?/span>Windows2000?/span>WindowsXP?/span>Windows2003。支持各U开发语aQ?/span>Visual C++?span>Visual C++.Net?/span>Visual Basic 6 ?/span>Visual Basic.Net?/span>C#?/span>PowerBuilder?/span>Delphi?/span>C++Builder、易语言{?/span>Skin++ 目前已经拥有数量众多的用Pq且有很多的国内外大公司客户。无论其换肤的效果还是程序本w的E_性,都堪UC。要做出漂亮风格的界面,使用Skin++变得非常单,只要一行代码,p让你的程序彻底换肤,q拥有动态换肤的功能?/span>

       Skin++ For DotNet目前全面支持Visual C#.net 2002?/span>Visual C#.net 2003?/span>Visual C#.net 2005?/span>Visual VB.net 2002?/span>Visual VB.net 2003?/span>Visual VB.net 2005?/span>Visual VC.net 2002?/span>Visual VC.net 2003?/span>Visual VC.net 2005?/span>

       使用Skin++之前需要做一个准备工作,注册Skin++控g?/span>

       ׃Skin++ For DotNet是以COM的Ş式存在的Q所以在你的机器W一ơ用之前应该先注册?/span>DLL文g。注册命令:(x)RegSvr32.exe  Skin++存在的\?/span>\SkinPPDotNet.dll 注册后会(x)出现下图所C:(x)

      

 

 

二?/span>Skin++如何?/span>C#.net 2005 中?/span>

       1.创徏C# Windows应用E序

      

       2.Skin++相关文g

              ?/span>Skin++的安装目录下拯一?/span>Skin++皮肤文gQ?/span>*.ssk?/span>*.sppQ到当前工程目录.下?/span>

       3.d引用

              右键单击工程目录的引用节?/span> Q弹Z面的菜单

             

              请单?#8220;d引用(&R)”菜单,此时?x)弹?#8220;d引用”H体,如下图:(x)

      

      

切换?/span>COM面Q请选择SkinPPDotNet 3.0 Type Librarylg,q双击该,或点M边的“定”按钮。此时在引用?wi)列表中会(x)多?/span>SKINPPDOTNETLib一:(x)

 

4.d名字I间

       请在Program .csH体的代码开头处d using SKINPPDOTNETLib;

    

 

 

    5.声明Skin++lg变量

    请在 Program中写上:(x)public static SKINPPDOTNETLib.SkinPPDotNetClass SkinPPObj;

      

 

       6.创徏Skin++lg实例

       ?/span>MainQ)(j)中创?/span>Skin++lg对象Q?/span>

SkinPPObj = new SkinPPDotNetClass();

     SkinPPObj.LoadSkin("PixOS.spp", false);

             

       x(chng)Q?/span>Skin++添加完成了(jin)Q请?/span>F5q行Q效果如下图Q?/span>

      

 

       7.注意事项

       1.h意你拯?/span>Skin++皮肤的\径,sppLoadSkin可以指定带\径的皮肤名称Q支持绝对\径和相对路径。在2003中,工程的调试目录默认在\bin\Debug?/span>\bin\Release中,所以在本文的例子中Q请把皮肤拷贝到\bin\Debug目录中。当然你可以?/span>sppLoadSkin中指定皮肤的路径?/span>

       2.sppLoadSkin的第二个参数是,是否?/span>Skin++不自动截h有的H口q行换肤。默认情况下请填?/span>false.是?/span>Skin++对你所有的H口q行换肤。这样以后凡是从你程序中弹出的窗口均能自动换肤,而不需要你填写M的代码?/span>

       3.l心(j)的朋友也怼(x)注意刎ͼ我们?/span>Application.EnableVisualStyles();q句话注释掉?jin)。原因是Skin++已经?span>C#所有的控gq行?jin)彻底的换肤Q所以在q个地方应该?span>C#默认的美化工作停止掉Q这样可以提升显C效率?/span>



]]>
.NetFrameWork?Compact NetFrameWork中Combox控g的区?/title><link>http://m.tkk7.com/zqli/archive/2007/04/26/113850.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Thu, 26 Apr 2007 09:08:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/04/26/113850.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/113850.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/04/26/113850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/113850.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/113850.html</trackback:ping><description><![CDATA[<p>从数据库中查询数据出来时Q在赋值到Combox控gӞ当Combox的Collections里没有对应的条目Q?NetFrameWork可以把数据库取出来的值加到里面去Q?Compact NetFrameWork的Collections里如无相对应的itemQ将昄null?/p> <img src ="http://m.tkk7.com/zqli/aggbug/113850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-04-26 17:08 <a href="http://m.tkk7.com/zqli/archive/2007/04/26/113850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>L水晶报表的数据库验证界面?/title><link>http://m.tkk7.com/zqli/archive/2007/04/26/113847.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Thu, 26 Apr 2007 09:01:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/04/26/113847.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/113847.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/04/26/113847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/113847.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/113847.html</trackback:ping><description><![CDATA[<p><strong> WinFormQ?/strong>           <br>                this.crystalReportViewer1.ReportSource = this.customerByLivingPlace1;<br>                // 数据库Login<br>               <br>                foreach (CrystalDecisions.Shared.IConnectionInfo connection in this.customerByLivingPlace1.DataSourceConnections)<br>                {<br>                    connection.SetConnection("localhost", "Real_EstatePC", "**", "**");<br>                }<br>                this.crystalReportViewer1.Refresh();<br>           // 子报表的Login<br>             foreach (CrystalDecisions.CrystalReports.Engine.ReportDocument sr in document.Subreports)<br>             {<br>                 foreach (CrystalDecisions.Shared.IConnectionInfo connection in this.customerByLivingPlace1.DataSourceConnections)<br>                 {<br>                      connection.SetConnection("localhost", "Real_EstatePC", "**", "**");<br>                 }<br>             }<br><br><br>注:(x)customerByLivingPlace1指向rpt?br><br><br><strong>WebFormQ?/strong><br> 首先,Z(jin)d方便,数据库的用户名和密码先写到Web.config? <br><appSettings> <br>    <add key="DBServerName" value="你的数据库服务器" /> <br>    <add key="DBUserID" value="sa" /> <br>    <add key="DBPassWord" value="UU1Tc3lzdGVt" /> <br></appSettings> </p> <p>然后写个cLl一验证d <br>using System; <br>using System.Collections.Generic; <br>using System.Text; <br>using System.Configuration; </p> <p>namespace BLL <br>{ <br>    public class LoginCrystalReport <br>    {         <br>        public void Login( CrystalDecisions.CrystalReports.Engine.ReportDocument report) <br>        { <br>            string serverName=ConfigurationManager.AppSettings["DBServerName"]; <br>            string userId = ConfigurationManager.AppSettings["DBUserID"]; </p> <p>            string passWord=ConfigurationManager.AppSettings["DBPassWord"]; <br>            <br>            //Set Database Logon to main report <br>            foreach (CrystalDecisions.Shared.IConnectionInfo connection in report.DataSourceConnections) <br>            { <br>                if (connection.ServerName == serverName) <br>                { <br>                    connection.SetLogon(userId, passWord); <br>                } <br>            } </p> <p>            //Set Database Logon to subreport <br>            foreach (CrystalDecisions.CrystalReports.Engine.ReportDocument subreport in report.Subreports) <br>            { <br>                foreach (CrystalDecisions.Shared.IConnectionInfo connection in subreport.DataSourceConnections) <br>                { <br>                    if (connection.ServerName == serverName) <br>                    { <br>                        connection.SetLogon(userId, passWord); <br>                    } <br>                } <br>            } <br>        } </p> <p>        <br>    } <br>} <br><br></p> <img src ="http://m.tkk7.com/zqli/aggbug/113847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-04-26 17:01 <a href="http://m.tkk7.com/zqli/archive/2007/04/26/113847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DataGrid.DataSource为DataView的DataGrid列宽重新自定义绘制?/title><link>http://m.tkk7.com/zqli/archive/2007/03/27/106685.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Tue, 27 Mar 2007 08:08:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/03/27/106685.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/106685.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/03/27/106685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/106685.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/106685.html</trackback:ping><description><![CDATA[ <p>自定义DataGrid的列宽,数据源ƈ非直接从DataSet直接拖过来,而是动态添加,不多_(d)部分代码如下Q?br /><br />//重绘DataGrid的每个列</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) DataGridTableStyle ts = new DataGridTableStyle();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ts.MappingName = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.TableName; //如果l定的是Datatable,q里要变?sh)下?tng)?<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int numCols = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.Columns.Count;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int i = 0;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) DataGridTextBoxColumn aColumnTextColumn;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while (i < numCols) (tng) (tng) //重绘所有的列?tng)?<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) aColumnTextColumn = new DataGridTextBoxColumn();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) aColumnTextColumn.MappingName = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.Columns[i].ColumnName;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ts.GridColumnStyles.Add(aColumnTextColumn); (tng) (tng) (tng) (tng) //增加一U自定义的column风格 (tng) (tng) <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) i++;<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.TableStyles.Add(ts);</p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.TableStyles[0].GridColumnStyles[0].Width = 70; (tng) (tng) //W一列的宽度 (tng) (tng) <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.TableStyles[0].GridColumnStyles[0].HeaderText = "房屋~号"; //W一列的标题 (tng) (tng) <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.TableStyles[0].GridColumnStyles[1].Width = 200; (tng) (tng) //W二列的宽度 (tng) (tng) <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.TableStyles[0].GridColumnStyles[1].HeaderText = "YYYYY"; //W二列的标题 (tng) (tng) </p> <p> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.HousedataGrid.Refresh(); (tng) (tng) (tng) (tng) </p> <p> <br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //<br /><br /><br /><br /><br />相类似的另一U样式:(x)<br />private DataView dv1,dv2;<br />private DataGridTableStyle dgts;<br /><br />private void frmChhd_Resize(object sender, System.EventArgs e)<br />{<br />//调整dataGrid1的列?br />if(dv1!=null)<br />{<br />//d模板?br />if(dataGrid1.TableStyles.Count==0)<br />{<br />dgts.MappingName=dv1.Table.TableName;<br />dataGrid1.TableStyles.Add(dgts); <br />}<br />int i=dataGrid1.Width/6-10;<br /><br />dataGrid1.TableStyles[0].GridColumnStyles[0].Width=i*2;<br /><br />dataGrid1.TableStyles[0].GridColumnStyles[1].Width<br />=dataGrid1.TableStyles[0].GridColumnStyles[2].Width<br />=dataGrid1.TableStyles[0].GridColumnStyles[3].Width<br />=dataGrid1.TableStyles[0].GridColumnStyles[4].Width=i;<br />}<br /><br />}<br /></p> <img src ="http://m.tkk7.com/zqli/aggbug/106685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-03-27 16:08 <a href="http://m.tkk7.com/zqli/archive/2007/03/27/106685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C#的四个基本技?http://m.tkk7.com/zqli/archive/2007/03/13/103526.html放水老?/dc:creator>放水老?/author>Tue, 13 Mar 2007 06:20:00 GMThttp://m.tkk7.com/zqli/archive/2007/03/13/103526.htmlhttp://m.tkk7.com/zqli/comments/103526.htmlhttp://m.tkk7.com/zqli/archive/2007/03/13/103526.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/103526.htmlhttp://m.tkk7.com/zqli/services/trackbacks/103526.html1Q如果可能尽量用接口来~程

  .NET框架包括cd接口Q在~写E序的时候,你可能知道正在用.NET的哪个类。然而,在这U情况下如果你用.NET支持的接口而不是它的类来编E时Q代码会(x)变得更加E_、可用性会(x)更高。请分析下面的代码:(x)

private void LoadList (object [] items, ListBox l)
{
 for (int i = 0; i < items.Length;i++)
  l.Items.Add (items[i].ToString ());
}

  q个函数从一个可ZQ何对象的数组中加载ListBoxQ这D代码被限定为只能用数l。假惌些时候你发现那些对象存在数据库中Q或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段E序Q你׃用修攚wD늨序了(jin)Q对于Q何实现ICollection接口的类型它都能很好的工?

private void LoadList (ICollection items,ListBox l)
{
  foreach (object o in items)
  l.Items.Add (o.ToString ());
}

  ICollection被数l和所有System.Collection中的集合实现。此外,多维数组也支持ICollection接口。如果那q(sh)够的话,数据?NETcdh持ICollection接口。用接口写的q个函数不用需改就可以才许多中情况下用?

  2. 使用属性代替原始数?

  因ؓ(f)属性已l成a本n的元素,所以声明数据元素时它的作用域等U没有必要大于private。因Z码本w会(x)把属性看成数据元素,你ƈ没有失去使用单数据类型的便利?。相反它?x)你的代码更加灉|功能更加强大。属性你的数据元素装性更好。属性可以让你用lazy evaluation来返回数据。lazy evaluation的意思是当用戯求时才计它的|而不是一直保留着它?

  最后,属性可以是virtual也可以是abstract。你也可以在接口中定义属性?

  q里q有l护斚w的因素应当注意:(x)管操作两者的Ҏ(gu)是一L(fng)Q但是你把一个数据元素变成属性,那么原先客户端的E序便不能访问服务端的新版本E序?jin)。实际上对于在Web service中你惛_现序列化的g可以把它们变成属性来使用Q?

private int TheMonth = 0;

[XmlAttribute ("Month")]
public int Month
{
 get {
  return TheMonth;
 }
 set {
  TheMonth = value;
 }
}

  单通过属性就可以使你的所有数据元素私有化?

  3. 在Producer/Consumer 的Idiom中用Delegate

  当你生成一个实现producer idiomcȝ时候,使用deletate来通知consumer。这U方法相对于用接口更加灵zRDelegate是多点传送的Q所以不用加额外的代码你׃以支持多用户。相对于用接口这样做可ɾcM间的耦合性降低?

  下面的类处理键盘输入q把它传l所有的registered listenersQ?

public class KeyboardProcessor
{
private OnGetLine theFunc = null;

public OnGetLine OnGetLineCallback {
 get {
  return theFunc;
 }
 set {
  theFunc = value;
 }
}

public void Run (){
// Read input.
// If there is any listeners, publish:
string s;
do {
 s = Console.ReadLine ();
 if (s.Length == 0)
  break;
 if (theFunc != null){
  System.Delegate [] funcs =theFunc.GetInvocationList();
  foreach (OnGetLine f in funcs) {
   try {
    f (s);
   } catch (Exception e) {
    Console.WriteLine
    ("Caught Exception: {0}", e.Message);
   }
  }
 }
} while (true);
}

  M数目的listeners都可注册到producerQ它们所要做的只是提供一个特定的函数Qdeletate?

  4. 注意初始化顺?

  CQ中对于一些变量声明加入了(jin)initializer的概c(din)它们在构造函C前被执行Q实际上变量在基cȝ构造函数执行前之前被初始化?

  所以,在初始化变量的时候不要用基类中的数据Q因为它们还没有被构造?br />



]]>
C#验证数字http://m.tkk7.com/zqli/archive/2007/03/13/103482.html放水老?/dc:creator>放水老?/author>Tue, 13 Mar 2007 03:32:00 GMThttp://m.tkk7.com/zqli/archive/2007/03/13/103482.htmlhttp://m.tkk7.com/zqli/comments/103482.htmlhttp://m.tkk7.com/zqli/archive/2007/03/13/103482.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/103482.htmlhttp://m.tkk7.com/zqli/services/trackbacks/103482.html{ (tng) (tng)
 (tng) (tng) System.Text.RegularExpressions.Regex reg
 (tng) (tng) (tng) (tng) (tng) (tng) = new System.Text.RegularExpressions.Regex(@"^[-]?\d+[.]?\d*$"); (tng) (tng)
 (tng) (tng) return reg.IsMatch(str); (tng)
}

]]>
调用.NET库,制作鼠标右键弹出菜单?/title><link>http://m.tkk7.com/zqli/archive/2007/03/09/102809.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Fri, 09 Mar 2007 06:03:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/03/09/102809.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/102809.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/03/09/102809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/102809.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/102809.html</trackback:ping><description><![CDATA[ (tng) (tng) (tng) (tng) (tng) (tng)  (tng)可以从工h上拖个ContextMenu控g下来Qƈ~辑好,然后把你所需要添加ContextMenu的控件的ContextMenu属性设个右键菜单;除了(jin)上脓(chung)所q的Ҏ(gu)Q?zhn)也可以通过手工d代码来实现弹出式菜单。关键的cLContextMenucR该cL两个构造函敎ͼ其中ContextMenu()生成一个不含Q何菜单项的弹出式菜单QContextMenu(MenuItem[]  (tng) menus)生成一个包括参C所指定的菜单项的弹出式菜单。如要给一个按钮控件button1d弹出式菜单,可以参考以下的代码Q? (tng) <br /> (tng)  (tng) <br /> (tng) ContextMenu  (tng) Menu1=new  (tng) ContextMenu();  (tng)  (tng) <br /> (tng) Menu1.MenuItems.Add(new  (tng) MenuItem(“弹?gu)单一"));  (tng)  (tng) <br /> (tng) Menu1.MenuItems.Add(new  (tng) MenuItem(“弹?gu)单?));  (tng)  (tng) <br /> (tng) button1.ContextMenu=Menu1;  (tng) <br /> (tng)  (tng) <br /> (tng) ContextMenu有几个关键的属性、方法和事gQ可以帮助?zhn)定制弹出式菜单,属性RightToLeft可以使菜单项从右到左寚wQ属性SourceControlq回一个ControlDC当前所昄弹出菜单对应的控件。Show()Ҏ(gu)可以使程序主动显C弹?gu)单。当弹出菜单弹出时将引发一个Popup事gQ你可以在该事g的响应方法中q行一些处理弹出菜单昄前做一些操作? (tng) <br /> (tng)  (tng) <br /> (tng) (zhn)还可以参考MSDN中给出的一个示例来定制弹出式菜单:(x)  (tng) <br /> (tng) http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsContextMenuClassTopic.asp (tng)<br /><br />msdnCZ代码QC#Q?br /><br /><pre>private void MyPopupEventHandler(System.Object sender, System.EventArgs e) { // Define the MenuItem objects to display for the TextBox. MenuItem menuItem1 = new MenuItem("&Copy"); MenuItem menuItem2 = new MenuItem("&Find and Replace"); // Define the MenuItem object to display for the PictureBox. MenuItem menuItem3 = new MenuItem("C&hange Picture"); // Clear all previously added MenuItems. contextMenu1.MenuItems.Clear(); if(contextMenu1.SourceControl == textBox1) { // Add MenuItems to display for the TextBox. contextMenu1.MenuItems.Add(menuItem1); contextMenu1.MenuItems.Add(menuItem2); } else if(contextMenu1.SourceControl == pictureBox1) { // Add the MenuItem to display for the PictureBox. contextMenu1.MenuItems.Add(menuItem3); } } </pre> (tng) <img src ="http://m.tkk7.com/zqli/aggbug/102809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-03-09 14:03 <a href="http://m.tkk7.com/zqli/archive/2007/03/09/102809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]新手入门-WinForm如何打开一个新H体得同步关闭当前窗体。另求C/Sl构E序设计方式?/title><link>http://m.tkk7.com/zqli/archive/2007/02/02/97404.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Fri, 02 Feb 2007 00:53:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/02/02/97404.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/97404.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/02/02/97404.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/97404.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/97404.html</trackback:ping><description><![CDATA[ <p>提问Q?/p> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>问?7712190(25458848@163.com) 信誉:96 U别:user5 日期:2006-9-10 23:49:27</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: visible; HEIGHT: 50px; WORD-WRAP: break-word">弟一直都是做 B/S开? q几天心(j)血来潮 惛_一?C/SE序 一入门遇到这个问?我在 登陆H体?NEW?一个新H体吧新H体Show?之后 原来得窗体cLOSE。新NEW得窗体也关闭? 不知道ؓ(f)什?h? 另求 C/SE序?设计Ҏ(gu)? 比如如何处理 公共得变?{应该注意得事情 希望大家不吝赐教 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>回复Q?</p> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?wzq6511() 信誉:100 U别:user1 日期:2006-9-11 0:36:28 id:36659940</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">不要用closeQ用hideQ原先的H体只能隐藏h不能关闭? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?bejon(阿牛[如果我懂Q必坦诚相告Q如果?zhn)懂,请不怜赐教。]) 信誉:93 U别:star1 日期:2006-9-11 2:00:21 id:36660132</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">在new form后用this.close;来完? 在new form之前把窗体id写在注册表,然后在new form之后(g)查那里,如果有值就使用api关闭那个H体Q然后把注册表清I? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?zhgroup(王员? 信誉:99 U别:star1 日期:2006-9-11 8:06:33 id:36660371</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">1、要看原H体是那个窗体了(jin)Q如果是入口的窗体,则应hide,惌昄时可用Show. 如果是登陆窗?在主H体的Main入口? FormLogin frm = new FormLogin(); frm.ShowDialog(); if 登陆p| 关闭H体 return 2、和B/S基本cMQ只不过对于状态信息比较容易控制? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?qzh1119(大浪淘沙) 信誉:59 U别:user2 日期:2006-9-11 8:12:07 id:36660412</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">up </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?qzh1119(大浪淘沙) 信誉:59 U别:user2 日期:2006-9-11 8:12:33 id:36660419</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">x(chng)Q学?fn)? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?bestshl(快乐的Coder) 信誉:100 U别:user2 日期:2006-9-11 8:24:52 id:36660529</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">zhgroup(王员? 正解 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?interboy(冯东) 信誉:100 U别:user2 日期:2006-9-11 8:27:37 id:36660559</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">zhgroup(王员? 说的?如果你把main函数攑֜loginform里的?那么它就是主H体,如果你在它里面调用了(jin)this.close();你想?ȝ体都关了(jin),别的?皮之不存,毛将焉附! 把loginform作ؓ(f)子窗?通过ȝ体了(jin)掉子H体q行判断 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?7712190(25458848@163.com) 信誉:96 U别:user5 日期:2006-9-11 12:40:41 id:36667940</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">问题是我不想HIde 真的没有其他的办法了(jin)? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?lovefootball(蟑螂Q生zd是扯?-做h要放低姿态)(j)) 信誉:98 U别:star2 日期:2006-9-11 12:49:07 id:36668125</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">上面已经说清楚了(jin) 如果你不想hide 那你在main里面先newq个登陆H体 如果登陆成功在runȝ? 否则关闭 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?zahuifan(杂烩? 信誉:93 U别:star1 日期:2006-9-11 12:56:33 id:36668305</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">up </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?guyes123(以ؓ(f)喜欢q里,所以来接分) 信誉:100 U别:user1 日期:2006-9-11 13:00:06 id:36668391</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">一般还是用HIDE? 其他的我׃?x)?jin) </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?naturalth(自我批判Q是思想、品得素质、技能创新的优良工具) 信誉:99 U别:user4 日期:2006-9-11 13:07:31 id:36668586</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">#region "Main" public ModMain() { } [STAThreadAttribute] static void Main() { //异常处理 Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info(); frmLogon frm = new frmLogon(); frm.txtUser.Text = loginUser; if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel) { return; } System.Windows.Forms.Application.Run(new myMenu()); } #endregion </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?xvting(xvting) 信誉:103 U别:user4 日期:2006-9-11 15:10:44 id:36672298</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">VS默认的WinFormE序模板只有一个程序消息@环,q且入口Form关闭的同旉出程序消息@环,l束E序? 开? | | 消息循环Q入口FormQ? | | l束 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?xvting(xvting) 信誉:103 U别:user4 日期:2006-9-11 15:14:42 id:36672390</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">可以设计下面的流E? 开? | | False 消息循环Q登陆FormQ?-------- | | | True | | | 消息循环Q主FormQ? | | | |-------------------------- 退? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?xvting(xvting) 信誉:103 U别:user4 日期:2006-9-11 15:16:34 id:36672453</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">Demo StartApp.cs文g ///////////////////////////////////////////////////////////////// using System; using System.Windows.Forms; using System.Drawing; using System.Text; namespace WinFromDemo { public class StartApp { private static bool LoginResult = false; [STAThread] static void Main() { //First Message Loop LoginContext loginContext = new StartApp.LoginContext(); Application.Run(loginContext); if (LoginResult) { //Second Message Loop StartApp.MainContext mainContext = new StartApp.MainContext(); Application.Run(mainContext); } } public class LoginContext : ApplicationContext { private LoginDialog loginDialog; public LoginContext() { loginDialog = new LoginDialog(); loginDialog.StartPosition = FormStartPosition.CenterScreen; loginDialog.Closed += new EventHandler(OnFormClosed); loginDialog.Show(); } private void OnFormClosed(object sender, EventArgs e) { LoginResult = !(this.loginDialog.DialogResult == DialogResult.Cancel); ExitThread(); } } public class MainContext : ApplicationContext { private Form mainForm; public MainContext() { mainForm = new Form(); mainForm.StartPosition = FormStartPosition.CenterScreen; mainForm.Closed += new EventHandler(OnFormClosed); mainForm.Show(); } private void OnFormClosed(object sender, EventArgs e) { ExitThread(); } } } } </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?csLius() 信誉:100 U别:user2 日期:2006-9-11 15:17:56 id:36672496</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">http://blog.csdn.net/Knight94/archive/2006/08/22/1104957.aspx </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?pegtop(再回? 信誉:100 U别:user2 日期:2006-9-11 15:23:51 id:36672677</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">新窗体是在原H体基础上徏立v来的,不能关闭原窗体只能隐? 要想处理全局变量,采用Static变量 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?pretty_soft() 信誉:100 U别:user1 日期:2006-9-11 15:36:50 id:36673096</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">我觉得还? 开?--登陆画面/昄ȝ体默认界?--用showdialog昄登陆---判断q回值初始权? q样比较? 把应用程序加载放到启动画面去 q种更适合比较大的pȝQ不同的模块不同的用h? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?Santos(快乐的GG) 信誉:100 U别:user4 日期:2006-9-11 16:15:46 id:36674473</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">ShowDialog();Ҏ(gu)才是正解. Button1_Click() { xxxForm frm = new xxxForm(); frm.ShowDialog(); } </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?kissknife(侧n向南? 信誉:100 U别:user5 日期:2006-9-11 16:20:54 id:36674652</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">http://www.cnblogs.com/KissKnife/archive/2006/09/10/500158.html </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?ttgzs(一路狂? 信誉:100 U别:user1 日期:2006-9-11 17:01:58 id:36676000</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">#region "Main" public ModMain() { } [STAThreadAttribute] static void Main() { //异常处理 Application.ThreadException += new ThreadExceptionEventHandler(MainUIThreadExceptionHandler); Common.Database.ConnectionString = Get_Info(); frmLogon frm = new frmLogon(); frm.txtUser.Text = loginUser; if (frm.ShowDialog()==System.Windows.Forms.DialogResult.Cancel) { return; } System.Windows.Forms.Application.Run(new myMenu()); } #endregion </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?kubbye(蛤蟆就是我) 信誉:100 U别:user1 日期:2006-9-11 23:15:00 id:36681363</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">准确的说,做ؓ(f)启动H体的那个窗体是不能关的,它关?E序停?其他的窗体可以关,启动H体只能隐藏 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?kubbye(蛤蟆就是我) 信誉:100 U别:user1 日期:2006-9-11 23:17:29 id:36681383</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">接上?你可以把ȝ面作为启动窗?然后在主界面未显C出来前,先显C登录窗?d成功再显CZH体,d不成?直接退?直接在form的load事g中写好? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?qiujb(楚留? 信誉:100 U别:user2 日期:2006-9-12 8:12:25 id:36682515</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">zhgroup(王员? 正解 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?Samen168(让代码ؓ(f)你写代码) 信誉:95 U别:star1 日期:2006-9-12 8:56:52 id:36683381</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">逻辑问题 main() { loginform lf = new loginform(); if(lf.Showdialog() == DialogResult.OK) { mainform mf = new mainform(); mf.show(); } } q样Ҏ(gu)不存在谁打开? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?Samen168(让代码ؓ(f)你写代码) 信誉:95 U别:star1 日期:2006-9-12 8:57:00 id:36683386</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">Ҏ(gu) </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?sunxianyu(扑ַ? 信誉:100 U别:user2 日期:2006-9-12 9:05:26 id:36683679</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">zhgroup(王员? ( ) 信誉Q?9 Blog 正解 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?fds2003(Hunter) 信誉:99 U别:user5 日期:2006-9-12 9:17:54 id:36684103</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">上面能说的都讲了(jin)Q? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?yangao(偶新?请问门在哪里Q? 信誉:100 U别:user4 日期:2006-9-12 9:41:16 id:36684775</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">学习(fn) </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?henrydee1(d) 信誉:101 U别:user2 日期:2006-9-12 10:29:21 id:36686255</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">if (this.ActiveMdiChild!=null) { this.ActiveMdiChild.Close(); //关闭已经打开的子H体 } InSchool child_InSchool=new InSchool(); child_InSchool.MdiParent=this;//this表示本窗体ؓ(f)其父H体 child_InSchool.Show(); </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?xiaoliangwh(亮wh) 信誉:100 U别:user2 日期:2006-9-12 23:55:03 id:36705585</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">xuexi </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?sdl2005lyx() 信誉:100 U别:user4 日期:2006-9-13 8:26:41 id:36706505</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">lzQ一个很单的办法Q刚好前几天解决的)(j)Q? 你在原来的窗体设|一个public bool bNew=false;的变量,在你要new新窗体的地方Ҏ(gu)如下代码Q? bNew=true; this.Close(); //原来H体消失?jin),但它的类作用域ƈ没有消? 然后在你原来定义、用原H体变量的地方,即frmOld.ShowDialog();之后Q? if(frmOld.bNew) { NewForm frmNew=new NewForm (); frmNew.ShowDialog(); } 问题搞定了(jin)。。? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?GXY2005(晓晨眉好^_^) 信誉:94 U别:user5 日期:2006-9-13 8:52:21 id:36707030</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">jf </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?wuhuiITren(CSDN男主? 信誉:100 U别:user2 日期:2006-9-14 13:26:23 id:36740819</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">g的都说了(jin)Q楼主自׃个个试就可以?jin)啊Q想怎么办就怎么办啊 </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?slex(蘂橤Q蛋不能扯远Q笑不能搞大)) 信誉:100 U别:user4 日期:2006-9-14 14:35:50 id:36743030</p> <pre style="OVERFLOW-Y: visible; OVERFLOW-X: auto; HEIGHT: 50px; WORD-WRAP: break-word">上面的那两个Ҏ(gu)已经能解决lz问题?sh)(jin),该结?呵呵 </pre> <img src ="http://m.tkk7.com/zqli/aggbug/97404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-02-02 08:53 <a href="http://m.tkk7.com/zqli/archive/2007/02/02/97404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>低错误-DataView.Count属性?/title><link>http://m.tkk7.com/zqli/archive/2007/02/01/97342.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Thu, 01 Feb 2007 12:12:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/02/01/97342.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/97342.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/02/01/97342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/97342.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/97342.html</trackback:ping><description><![CDATA[记录个自q低错误!!!!!!!!!!!!!!!!!<br /><br />今天在对一个表q行删除Q发C下问题:(x)<br /><br />先附一D代码:(x)Q方便调试,加了(jin)些MessageBox.Q?br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string deleteID = this.costomerDataGrid[this.costomerDataGrid.CurrentRowIndex, 6].ToString();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)  (tng)this.costomer_RecordTableAdapter.Fill(this.realEstatePDADataSet.Costomer_Record);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)前的dataView集合敎ͼ(x)"+this.dataView2.Count.ToString());<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.dataView2.RowFilter = "客户~号 = '" +deleteID+ "'";<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //this.dataView1.Sort = "来访旉";<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)条gQ? + deleteID);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)后的dataView集合敎ͼ(x)"+this.dataView2.Count.ToString());<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordBindingSource.EndEdit();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) for (int i = 0; i < this.dataView2.Count; i++)<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("删除W?+i+"条记?);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordBindingSource.RemoveAt(i);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordTableAdapter.Update(this.realEstatePDADataSet.Costomer_Record);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("删除成功!");<br /><br />出现问题Q表中的记录没被清除完全。仔l检查,发现Data.Count属性随着循环删除Q每ơ比?i < this.dataView2.CountQCount属性也是动态变化的。解军_?<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string deleteID = this.costomerDataGrid[this.costomerDataGrid.CurrentRowIndex, 6].ToString();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordTableAdapter.Fill(this.realEstatePDADataSet.Costomer_Record);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)前的dataView集合敎ͼ(x)"+this.dataView2.Count.ToString());<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.dataView2.RowFilter = "客户~号 = '" +deleteID+ "'";<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) //this.dataView1.Sort = "来访旉";<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)条gQ? + deleteID);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("qo(h)后的dataView集合敎ͼ(x)"+this.dataView2.Count.ToString());<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordBindingSource.EndEdit();<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while(this.dataView2.Count!=0)<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("删除W? + Convert.ToSingle(this.dataView2.Count)+ "条记?);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordBindingSource.RemoveAt(this.dataView2.Count-1);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomer_RecordTableAdapter.Update(this.realEstatePDADataSet.Costomer_Record);<br /> (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) MessageBox.Show("删除成功!");<br /><br /><img src ="http://m.tkk7.com/zqli/aggbug/97342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-02-01 20:12 <a href="http://m.tkk7.com/zqli/archive/2007/02/01/97342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C# Inner Class vs. java 的inner class比较http://m.tkk7.com/zqli/archive/2007/02/01/97235.html放水老?/dc:creator>放水老?/author>Thu, 01 Feb 2007 05:48:00 GMThttp://m.tkk7.com/zqli/archive/2007/02/01/97235.htmlhttp://m.tkk7.com/zqli/comments/97235.htmlhttp://m.tkk7.com/zqli/archive/2007/02/01/97235.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/97235.htmlhttp://m.tkk7.com/zqli/services/trackbacks/97235.html
public class TestOuter

{

public static void outer(){}

public void outer2(){}



internal class A

{

public voidtest()

{

outer(); // 可以调用外部?rn)态方法,无法调用实例Ҏ(gu)

outer2(); // 本句无法通过~译

}

}

}

在Java中,下面的代码是可以很正常的使用的:(x)

public class testinner

{

static public void Main(String[] args)

{

testinner tester = new testinner();

testinner.Inner inner = tester.new Inner();

inner.testinner();

}

public void test(){ }



class Inner

{

public void testinner()

{

test();

}

}

}



Ҏ(gu)之下QC#中的内部c能够用外部类定义的类型和?rn)态方法,但是不能直接使用外部cȝ实例Ҏ(gu)Q直接看来,外部cd于内部类的作用更像是一个命名空_(d)在C#中,始终可以用(只要讉K控制允许Q?

TestOuter.A instance = new TestOuter.A();

来创Z个内部类的实例,q个实例与外部类的Q何实例没有Q何直接的关系。类gJava中的?rn)态内部类?

Java中,非静(rn)态内部类可以讉K所有外部类的方法和变量。所以Java中的内部cȝ构造也依赖于外部类Q必M用如Q?

Outer.Inner inner = outer.new Inner();

q样的语法来定义内部cȝ实例以确保他与某一定的外部类的对象相对应?

而在C#中,cd分ؓ(f)Nested Class和Not-Nested ClassQ前者是声明在其他数据类型内部的cR后者是直接定义在某一个命名空间的cR?

非内嵌类只允怋用public和internal的访问控Ӟ而内|类则允怋用所有的五种讉K控制W,private, protected , internal protected。内部类也可以访问外部类的所有方?包括instanceҎ(gu)和privateҎ(gu)Q但是需要显式的传递一个外部类的实例?

如:(x)

public class TestOuter

{

public void outer2(){}



internal class A

{

public A(TestOuter obj)

{

Outer_this = obj

}

public void test()

{

obj.outer2();

}

TestOuter Outer_thisQ?

}

}

C#q样做的原因Q主要是Z(jin)避免outer.new q样的语法,保持一致的对象创徏方式。虽然相比于Java需要创Z个新的方法和变量Q但是对象的创徏q程更加直接Q而且避免?jin)隐含的内部cM外部cȝ实例之间的关pR?

如果分析到CLR的实现层面,我们也可以知道,C#的内部类应该q没有包含外部类的虚函数表,而仅仅包含了(jin)?rn)态方法表Q所有对外部cȝҎ(gu)的调用时通过外部cL针作的。具体的机制可能更复杂。但是除此以外,内部cdƈ没有被作ZU特D的cd处理Q而是必须与其他普通的对象采取一L(fng)机制q行创徏?

C#的内部类提供?jin)覆盖的功能Q在一个包含了(jin)内部cȝcȝ子类中可以用关键字new 来覆盖同名内部类的实现?

?

class A1

{

class B1 { }

}

class A2 : A1

{

new class B1 { }

}

C#中的内部cM(x)覆盖同名的外部类的方法。如果上面的A1中定义Q何名为B1()的方法,该方法将被覆盖?



内部cM用的一些General Information:

创徏内部cȝ一个目的是Z(jin)抽象外部cȝ某一状态下的行为,或者内部类仅在外部cȝ某一特定上下文存在。或是隐藏实玎ͼ通过内部类设ؓ(f)privateQ可以设|仅有外部类可以讉K该类。内部类的另外一个重要的用途是当外部类需要作为某个特定的cd作,而外部类已经l承与另外一个类的时候,因ؓ(f)Java不支持多l承Q所以创Z个对应的内部cM为外部类的一个fa&ccedil;ade来用?

通常Q创建内部类的动机都是上面中的其中之一或者几V而其中最常见的目的莫q于前两V?

我们看一下Java中处理事件的代码Q?

public class Demo1 extends JPanel

{

class IconDemo implements Icon {}

}

q个例子对应?jin)上面的W一U动机,卛_装特定状态或特定实现的动机。IconDemo仅在的Demo1中用,对应特定的图标绘制行为?

常见的另外一个场合是需要自定义Action的行为,我们可能有如下的c:(x)

public class Demo1 extends JPanel implements ActionListener

{

private JMenuItem item1;

void foo()

{

Item1 = new JMenuItemQ“test?, new TestAction(“some action?Q?

}

Private TestAction extends AbstractAction

{

//code goes here

}

}

q种情况下,TestAction可以看成是一U特化的要求?



隐藏实现的需求往往对应于内部抽象,或者二ơ抽?Secondary Abstraction)Q它对应着对于cd部的部分行ؓ(f)q一步抽象,聚簇。常见的一U情冉|在内部类中创建私有的l构Q用于抽象尽在类的内部用的数据l构?



而作为Fa&ccedil;ade使用的情늛当于外部cM为内部类的创建工厂,当外部请求需要外部类提供一个它不能够(h)承的基类或接口的时候,外部cM生一个内部类的实例对象,q回l相应的h?



创徏内部cȝ一些原则:(x)

如果一下一些情况出玎ͼ避免使用内部c:(x)

内部cȝ功能q分膨胀影响?jin)对外部cȝ阅读

内部cd部包含内部类Q对代码的可L媄(jing)响很?

内部cd以不依赖于外部类被用,在这U情况下Q说明内部类与外部类的抽象没有包含关p,则应该将内部cMZU独立的抽象设计为另外一个外部类?可以参考内部类设计的第二目的,内部抽象)



注:(x)在VC中可以用内部类作ؓ(f)模版的局部特化处理,掠过不提。其实我也不太懂Q?)


]]>
DataGridView昄行号http://m.tkk7.com/zqli/archive/2007/01/27/96253.html放水老?/dc:creator>放水老?/author>Sat, 27 Jan 2007 03:23:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/27/96253.htmlhttp://m.tkk7.com/zqli/comments/96253.htmlhttp://m.tkk7.com/zqli/archive/2007/01/27/96253.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/96253.htmlhttp://m.tkk7.com/zqli/services/trackbacks/96253.html



可以在DataGirdView的RowPostPaint事g中进行绘制?br />如:(x)d以下Ҏ(gu)代码

private void DrawRowIndex(object sender, DataGridViewRowPostPaintEventArgs e)
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) {
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) e.RowBounds.Location.Y,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomerDataGridView.RowHeadersWidth - 4,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) e.RowBounds.Height);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomerDataGridView.RowHeadersDefaultCellStyle.Font,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) rectangle,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) this.costomerDataGridView.RowHeadersDefaultCellStyle.ForeColor,
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) TextFormatFlags.VerticalCenter | TextFormatFlags.Right);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) }
卛_完成昄行号的功能?br />



]]>
[转]揭开正则表达式的秘面纱http://m.tkk7.com/zqli/archive/2007/01/21/95180.html放水老?/dc:creator>放水老?/author>Sun, 21 Jan 2007 14:12:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/21/95180.htmlhttp://m.tkk7.com/zqli/comments/95180.htmlhttp://m.tkk7.com/zqli/archive/2007/01/21/95180.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/95180.htmlhttp://m.tkk7.com/zqli/services/trackbacks/95180.html 引言

 (tng) (tng) (tng) 正则表达式(regular expressionQ描qC(jin)一U字W串匚w的模式,可以用来Q(1Q检查一个串中是否含有符合某个规则的子串Qƈ且可以得到这个子ԌQ?Q根据匹配规则对字符串进行灵zȝ替换操作?br />
 (tng) (tng) (tng) 正则表达式学?fn)v来其实是很简单的Q不多的几个较ؓ(f)抽象的概念也很容易理解。之所以很多h感觉正则表达式比较复杂,一斚w是因为大多数的文档没有做到由入深地讲解Q概念上没有注意先后序Q给读者的理解带来困难Q另一斚wQ各U引擎自带的文档一般都要介l它Ҏ(gu)的功能,然而这部分Ҏ(gu)的功能ƈ不是我们首先要理解的?br />
 (tng) (tng) (tng) 文章中的每一个D例,都可以点击进入到试面q行试。闲话少_(d)开始?/p>


1. 正则表达式规?/h4>

1.1 普通字W?/h5>

 (tng) (tng) (tng) 字母、数字、汉字、下划线、以?qing)后边章节中没有?gu)定义的标点符P都是"普通字W?。表辑ּ中的普通字W,在匹配一个字W串的时候,匚w与之相同的一个字W?br />
 (tng) (tng) (tng) Q匹配结果是Q成功;匚w到的内容是:(x)"c"Q匹配到的位|是Q开始于2Q结束于3。(注:(x)下标?开始还是从1开始,因当前编E语a的不同而可能不同)(j)

 (tng) (tng) (tng)
Q匹配结果是Q成功;匚w到的内容是:(x)"bcd"Q匹配到的位|是Q开始于1Q结束于4?/p>


1.2 单的转义字符

 (tng) (tng) (tng) 一些不便书写的字符Q采用在前面?"\" 的方法。这些字W其实我们都已经熟知?jin)?/p>

表达?/p>

可匹?/p>

\r, \n

代表回R和换行符

\t

制表W?/p>

\\

代表 "\" 本n

 (tng) (tng) (tng) q有其他一些在后边章节中有Ҏ(gu)用处的标点符P在前面加 "\" 后,׃表该W号本n。比如:(x)^, $ 都有Ҏ(gu)意义Q如果要惛_配字W串?"^" ?"$" 字符Q则表达式就需要写?"\^" ?"\$"?/p>

表达?/p>

可匹?/p>

\^

匚w ^ W号本n

\$

匚w $ W号本n

\.

匚w数点(.Q本w?/p>

 (tng) (tng) (tng) q些转义字符的匹配方法与 "普通字W? 是类似的。也是匹配与之相同的一个字W?br />
 (tng) (tng) (tng) Q匹配结果是Q成功;匚w到的内容是:(x)"$d"Q匹配到的位|是Q开始于3Q结束于5?/p>


1.3 能够?'多种字符' 匚w的表辑ּ

 (tng) (tng) (tng) 正则表达式中的一些表C方法,可以匚w '多种字符' 其中的Q意一个字W。比如,表达?"\d" 可以匚wL一个数字。虽然可以匹配其中Q意字W,但是只能是一个,不是多个。这好比玩扑克牌时候,大小王可以代替Q意一张牌Q但是只能代替一张牌?/p>

表达?/p>

可匹?/p>

\d

L一个数字,0~9 中的L一?/p>

\w

L一个字母或数字或下划线Q也是 A~Z,a~z,0~9,_ 中Q意一?/p>

\s

包括I格、制表符、换늬{空白字W的其中L一?/p>

.

数点可以匹配除?jin)换行符Q\nQ以外的L一个字W?/p>

 (tng) (tng) (tng) \d\d"Q在匚w "abc123" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?12"Q匹配到的位|是Q开始于3Q结束于5?br />
 (tng) (tng) (tng)
a.\d"Q在匚w "aaa100" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?aa1"Q匹配到的位|是Q开始于1Q结束于4?/p>


1.4 自定义能够匹?'多种字符' 的表辑ּ

 (tng) (tng) (tng) 使用Ҏ(gu)?[ ] 包含一pd字符Q能够匹配其中Q意一个字W。用 [^ ] 包含一pd字符Q则能够匚w其中字符之外的Q意一个字W。同L(fng)道理Q虽然可以匹配其中Q意一个,但是只能是一个,不是多个?/p>

表达?/p>

可匹?/p>

[ab5@]

匚w "a" ?"b" ?"5" ?"@"

[^abc]

匚w "a","b","c" 之外的Q意一个字W?/p>

[f-k]

匚w "f"~"k" 之间的Q意一个字?/p>

[^A-F0-3]

匚w "A"~"F","0"~"3" 之外的Q意一个字W?/p>

 (tng) (tng) (tng) [bcd][bcd]" 匚w "abc123" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?bc"Q匹配到的位|是Q开始于1Q结束于3?br />
 (tng) (tng) (tng)
[^abc]" 匚w "abc123" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?1"Q匹配到的位|是Q开始于3Q结束于4?/p>


1.5 修饰匚wơ数的特D符?/h5>

 (tng) (tng) (tng) 前面章节中讲到的表达式,无论是只能匹配一U字W的表达式,q是可以匚w多种字符其中L一个的表达式,都只能匹配一ơ。如果用表辑ּ再加上修饰匹配次数的Ҏ(gu)W号Q那么不用重复书写表辑ּ可以重复匹配?br />
 (tng) (tng) (tng) 使用Ҏ(gu)是:(x)"ơ数修饰"攑֜"被修饰的表达?后边。比如:(x)"[bcd][bcd]" 可以写成 "[bcd]{2}"?/p>

表达?/p>

作用

{n}

表达式重复nơ,比如Q?a 相当?"\w\w"Q?a 相当?"aaaaa"

{m,n}

表达式至重复mơ,最多重复nơ,比如Q?a ba"?baa"?baaa"

{m,}

表达式至重复mơ,比如Q?a a12","_456","M12344"...

?

匚w表达?ơ或?ơ,相当?{0,1}Q比如:(x)

+

表达式至出?ơ,相当?{1,}Q比如:(x)

*

表达式不出现或出CQ意次Q相当于 {0,}Q比如:(x)

 (tng) (tng) (tng) \d+\.?\d*" 在匹?"It costs $12.5" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?12.5"Q匹配到的位|是Q开始于10Q结束于14?br />
 (tng) (tng) (tng)
go{2,8}gle" 在匹?"Ads by goooooogle" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?goooooogle"Q匹配到的位|是Q开始于7Q结束于17?/p>


1.6 其他一些代表抽象意义的Ҏ(gu)W号

 (tng) (tng) (tng) 一些符号在表达式中代表抽象的特D意义:(x)

表达?/p>

作用

^

与字W串开始的地方匚wQ不匚wM字符

$

与字W串l束的地方匹配,不匹配Q何字W?/p>

\b

匚w一个单词边界,也就是单词和I格之间的位|,不匹配Q何字W?/p>

 (tng) (tng) (tng) q一步的文字说明仍然比较抽象Q因此,举例帮助大家理解?br />
 (tng) (tng) (tng) ^aaa" 在匹?"xxx aaa xxx" ?/a>Q匹配结果是Q失败。因?"^" 要求与字W串开始的地方匚wQ因此,只有?"aaa" 位于字符串的开头的时候,"^aaa" 才能匚wQ?a >比如Q?aaa xxx xxx"?br />
 (tng) (tng) (tng) aaa$" 在匹?"xxx aaa xxx" ?/a>Q匹配结果是Q失败。因?"$" 要求与字W串l束的地方匹配,因此Q只有当 "aaa" 位于字符串的l尾的时候,"aaa$" 才能匚wQ?a >比如Q?xxx xxx aaa"?br />
 (tng) (tng) (tng) .\b." 在匹?"@@@abc" ?/a>Q匹配结果是Q成功;匚w到的内容是:(x)"@a"Q匹配到的位|是Q开始于2Q结束于4?br /> (tng) (tng) (tng) q一步说明:(x)"\b" ?"^" ?"$" cMQ本w不匚wM字符Q但是它要求它在匚wl果中所处位|的左右两边Q其中一Ҏ(gu) "\w" 范围Q另一Ҏ(gu) ?\w" 的范围?br />
 (tng) (tng) (tng)
\bend\b" 在匹?"weekend,endfor,end" ?/a>Q匹配结果是Q成功;匚w到的内容是:(x)"end"Q匹配到的位|是Q开始于15Q结束于18?/p>

 (tng) (tng) (tng) 一些符号可以媄(jing)响表辑ּ内部的子表达式之间的关系Q?/p>

表达?/p>

作用

|

左右两边表达式之?"? 关系Q匹配左Ҏ(gu)者右?/p>

( )

(1). 在被修饰匚wơ数的时候,括号中的表达式可以作为整体被修饰
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到

 (tng) (tng) (tng) Tom|Jack" 在匹配字W串 "I'm Tom, he is Jack" ?/a>Q匹配结果是Q成功;匚w到的内容是:(x)"Tom"Q匹配到的位|是Q开始于4Q结束于7。匹配下一个时Q匹配结果是Q成功;匚w到的内容是:(x)"Jack"Q匹配到的位|时Q开始于15Q结束于19?br />
 (tng) (tng) (tng)
(go\s*)+" 在匹?"Let's go go go!" ?/a>Q匹配结果是Q成功;匚w到内Ҏ(gu)Q?go go go"Q匹配到的位|是Q开始于6Q结束于14?br />
 (tng) (tng) (tng)
K?font color="#5050ff">(\d+\.?\d*)
" 在匹?"Q?0.9,K?0.5" ?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu)Q?K?0.5"Q匹配到的位|是Q开始于6Q结束于10。单独获取括可围匹配到的内Ҏ(gu)Q?20.5"?/p>


2. 正则表达式中的一些高U规?/h4>

2.1 匚wơ数中的贪婪与非贪婪

 (tng) (tng) (tng) 在用修饰匹配次数的Ҏ(gu)W号Ӟ有几U表C方法可以同一个表辑ּ能够匚w不同的次敎ͼ比如Q?{m,n}", "{m,}", "?", "*", "+"Q具体匹配的ơ数随被匚w的字W串而定。这U重复匹配不定次数的表达式在匚wq程中,L可能多的匹配。比如,针对文本 "dxxxdxxxd"QD例如下:(x)

表达?/p>

匚wl果

(d)(\w+)

"\w+" 匹配第一?"d" 之后的所有字W?"xxxdxxxd"

(d)(\w+)(d)

"\w+" 匹配第一?"d" 和最后一?"d" 之间的所有字W?"xxxdxxx"。虽?"\w+" 也能够匹配上最后一?"d"Q但是ؓ(f)?jin)整个表达式匹配成功?\w+" 可以 "让出" 它本来能够匹配的最后一?"d"

 (tng) (tng) (tng) 由此可见Q?\w+" 在匹配的时候,L可能多的匹配符合它规则的字W。虽然第二个举例中,它没有匹配最后一?"d"Q但那也是ؓ(f)?jin)让整个表达式能够匹配成功。同理,?"*" ?"{m,n}" 的表辑ּ都是可能地多匹配,?"?" 的表辑ּ在可匚w可不匚w的时候,也是可能的 "要匹?。这 U匹配原则就叫作 "贪婪" 模式 ?/p>

 (tng) (tng) (tng) 非贪婪模式:(x)

 (tng) (tng) (tng) 在修饰匹配次数的Ҏ(gu)W号后再加上一?"?" P则可以匚wơ数不定的表辑ּ可能少的匹配,使可匚w可不匚w的表辑ּQ尽可能?"不匹?。这U匹配原则叫?"非贪? 模式Q也叫作 "勉强" 模式。如果少匚w׃(x)D整个表达式匹配失败的时候,与贪婪模式类|非贪婪模式会(x)最限度的再匹配一些,以整个表达式匹配成功。D例如下,针对文本 "dxxxdxxxd" 举例Q?/p>

表达?/p>

匚wl果

(d)(\w+?)

"\w+?" 尽可能的匚wW一?"d" 之后的字W,l果是:(x)"\w+?" 只匹配了(jin)一?"x"

(d)(\w+?)(d)

Z(jin)让整个表辑ּ匚w成功Q?\w+?" 不得不匹?"xxx" 才可以让后边?"d" 匚wQ从而整个表达式匹配成功。因此,l果是:(x)"\w+?" 匚w "xxx"

 (tng) (tng) (tng) 更多的情况,举例如下Q?br />
 (tng) (tng) (tng) <td>(.*)</td>" 与字W串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匚w?/a>Q匹配的l果是:(x)成功Q匹配到的内Ҏ(gu) "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符Ԍ 表达式中?"</td>" 与字符串中最后一?"</td>" 匚w?

 (tng) (tng) (tng)
<td>(.*?)</td>" 匚w举例1中同L(fng)字符串时Q将只得?"<td><p>aa</p></td>"Q?再次匚w下一个时Q可以得到第二个 "<td><p>bb</p></td>"?/p>


2.2 反向引用 \1, \2...

 (tng) (tng) (tng) 表达式在匚wӞ表达式引擎会(x)小括号 "( )" 包含的表辑ּ所匚w到的字符串记录下来。在获取匚wl果的时候,括号包含的表达式所匚w到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示?jin)。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界Ӟ必须使用括h指定所要的范围。比如前面的 "<td>(.*?)</td>"?br />
 (tng) (tng) (tng) 其实Q?括号包含的表达式所匚w到的字符? 不仅是在匚wl束后才可以使用Q在匚wq程中也可以使用。表辑ּ后边的部分,可以引用前面 "括号内的子匹配已l匹配到的字W串"。引用方法是 "\" 加上一个数字?\1" 引用W?Ҏ(gu)号内匚w到的字符Ԍ"\2" 引用W?Ҏ(gu)号内匚w到的字符东y(c)…以此类推,如果一Ҏ(gu)号内包含另一Ҏ(gu)P则外层的括号先排序号。换句话_(d)哪一对的左括?"(" 在前Q那q一对就先排序号?/p>

 (tng) (tng) (tng) 举例如下Q?br />
 (tng) (tng) (tng) ('|")(.*?)(\1)" 在匹?" 'Hello', "World" " ?/a>Q匹配结果是Q成功;匚w到的内容是:(x)" 'Hello' "。再ơ匹配下一个时Q可以匹配到 " "World" "?br />
 (tng) (tng) (tng)
(\w)\1{4,}" 在匹?"aa bbbb abcdefg ccccc 111121111 999999999" ?/a>Q匹配结果是Q成功;匚w到的内容?"ccccc"。再ơ匹配下一个时Q将得到 999999999。这个表辑ּ要求 "\w" 范围的字W至重?ơ,?br />
 (tng) (tng) (tng)
<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹?"<td id='td1' style="bgcolor:white"></td>" ?/a>Q匹配结果是成功。如?"<td>" ?"</td>" 不配对,则会(x)匚wp|Q如果改成其他配对,也可以匹配成功?/p>


2.3 预搜索,不匹配;反向预搜索,不匹?/h5>

 (tng) (tng) (tng) 前面的章节中Q我讲到?jin)几个代表抽象意义的?gu)W号Q?^"Q?$"Q?\b"。它们都有一个共同点Q那是Q它们本w不匚wM字符Q只是对 "字符串的两头" 或?"字符之间的缝? 附加?jin)一个条件。理解到q个概念以后Q本节将l箋(hu)介绍另外一U对 "两头" 或?"~隙" 附加条g的,更加灉|的表C方法?/p>

 (tng) (tng) (tng) 正向预搜索:(x)"(?=xxxxx)"Q?(?!xxxxx)"

 (tng) (tng) (tng) 格式Q?(?=xxxxx)"Q在被匹配的字符串中Q它Ҏ(gu)处的 "~隙" 或?"两头" 附加的条件是Q所在缝隙的右侧Q必能够匹配上 xxxxx q部分的表达式。因为它只是在此作ؓ(f)q个~隙上附加的条gQ所以它q不影响后边的表辑ּȝ正匹配这个缝隙之后的字符。这q?"\b"Q本w不匚wM字符?\b" 只是所在缝隙之前、之后的字符取来q行?jin)一下判断,不会(x)影响后边的表辑ּ来真正的匚w?br />
 (tng) (tng) (tng) Windows (?=NT|XP)" 在匹?"Windows 98, Windows NT, Windows 2000" ?/a>Q将只匹?"Windows NT" 中的 "Windows "Q其他的 "Windows " 字样则不被匹配?br />
 (tng) (tng) (tng)
(\w)((?=\1\1\1)(\1))+" 在匹配字W串 "aaa ffffff 999999999" ?/a>Q将可以匚w6?f"的前4个,可以匚w9?9"的前7个。这个表辑ּ可以读解成:(x)重复4ơ以上的字母数字Q则匚w其剩下最?位之前的部分。当?dng)q个表达式可以不q样写,在此的目的是作ؓ(f)演示之用?/p>

 (tng) (tng) (tng) 格式Q?(?!xxxxx)"Q所在缝隙的右侧Q必M能匹?xxxxx q部分表辑ּ?br />
 (tng) (tng) (tng)
((?!\bstop\b).)+" 在匹?"fdjka ljfdl stop fjdsla fdj" ?/a>Q将从头一直匹配到 "stop" 之前的位|,如果字符串中没有 "stop"Q则匚w整个字符丌Ӏ?br />
 (tng) (tng) (tng)
do(?!\w)" 在匹配字W串 "done, do, dog" ?/a>Q只能匹?"do"。在本条举例中,"do" 后边使用 "(?!\w)" 和?"\b" 效果是一L(fng)?/p>

 (tng) (tng) (tng) 反向预搜索:(x)"(?<=xxxxx)"Q?(?<!xxxxx)"

 (tng) (tng) (tng) q两U格式的概念和正向预搜烦(ch)是类似的Q反向预搜烦(ch)要求的条件是Q所在缝隙的 "左侧"Q两U格式分别要求必能够匹配和必须不能够匹配指定表辑ּQ而不是去判断右侧。与 "正向预搜? 一L(fng)是:(x)它们都是Ҏ(gu)在缝隙的一U附加条Ӟ本n都不匚wM字符?br />
 (tng) (tng) (tng) 举例5Q表辑ּ "(?<=\d{4})\d+(?=\d{4})" 在匹?"1234567890123456" Ӟ匹配除?jin)?个数字和?个数字之外的中间8个数字。由?JScript.RegExp 不支持反向预搜烦(ch)Q因此,本条举例不能够进行演C。很多其他的引擎可以支持反向预搜索,比如QJava 1.4 以上?java.util.regex 包,.NET 中System.Text.RegularExpressions 命名I间Q以?qing)本站推荐?a >最单易用的 DEELX 正则引擎
?/p>


3. 其他通用规则

 (tng) (tng) (tng) q有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解q程中没有提到?/p>

3.1 表达式中Q可以?"\xXX" ?"\uXXXX" 表示一个字W("X" 表示一个十六进制数Q?/p>

形式

字符范围

\xXX

~号?0 ~ 255 范围的字W,比如Q?a \x20" 表示

\uXXXX

M字符可以使用 "\u" 再加上其~号?位十六进制数表示Q比如:(x)

3.2 在表辑ּ "\s"Q?\d"Q?\w"Q?\b" 表示Ҏ(gu)意义的同Ӟ对应的大写字母表C相反的意义

表达?/p>

可匹?/p>

\S

\D

匚w所有的非数字字W?/a>

\W

匚w所有的字母、数字、下划线以外的字W?/a>

\B

3.3 在表辑ּ中有Ҏ(gu)意义Q需要添?"\" 才能匚w该字W本w的字符汇?/p>

字符

说明

^

匚w输入字符串的开始位|。要匚w "^" 字符本nQ请使用 "\^"

$

匚w输入字符串的l尾位置。要匚w "$" 字符本nQ请使用 "\$"

( )

标记一个子表达式的开始和l束位置。要匚w括P请?"\(" ?"\)"

[ ]

用来自定义能够匹?'多种字符' 的表辑ּ。要匚w中括P请?"\[" ?"\]"

{ }

修饰匚wơ数的符受要匚w大括P请?"\{" ?"\}"

.

匚w除了(jin)换行W(\nQ以外的L一个字W。要匚w数Ҏ(gu)w,请?"\."

?

修饰匚wơ数?0 ơ或 1 ơ。要匚w "?" 字符本nQ请使用 "\?"

+

修饰匚wơ数?1 ơ。要匚w "+" 字符本nQ请使用 "\+"

*

修饰匚wơ数?0 ơ或Lơ。要匚w "*" 字符本nQ请使用 "\*"

|

左右两边表达式之?"? 关系。匹?"|" 本nQ请使用 "\|"

3.4 括号 "( )" 内的子表辑ּQ如果希望匹配结果不q行记录供以后用,可以使用 "(?:xxxxx)" 格式

 (tng) (tng) (tng) 举例1Q表辑ּ "(?:(\w)\1)+" 匚w "a bbccdd efg" ?/a>Q结果是 "bbccdd"。括?"(?:)" 范围的匹配结果不q行记录Q因?"(\w)" 使用 "\1" 来引用?/p>

3.5 常用的表辑ּ属性设|简介:(x)IgnorecaseQSinglelineQMultilineQGlobal

表达式属?/p>

说明

Ignorecase

默认情况下,表达式中的字母是要区分大写的。配|ؓ(f) Ignorecase 可匚w时不区分大小写。有的表辑ּ引擎Q把 "大小? 概念延?UNICODE 范围的大写?/p>

Singleline

默认情况下,数?"." 匚w除了(jin)换行W(\nQ以外的字符。配|ؓ(f) Singleline 可ɞ数点可匚w包括换行W在内的所有字W?/p>

Multiline

默认情况下,表达?"^" ?"$" 只匹配字W串的开??和结??位置。如Q?br />
①xxxxxxxxx②\n
③xxxxxxxxx?br />
配置?Multiline 可以?"^" 匚w ?外,q可以匹配换行符之后Q下一行开始前 ?的位|,?"$" 匚w ?外,q可以匹配换行符之前Q一行结??的位|?/p>

Global

主要在将表达式用来替换时起作用,配置?Global 表示替换所有的匚w?/p>

 (tng)


 (tng)

4. 其他提示

4.1 如果惌?jin)解高的正则引擎还支持那些复杂的正则语法,可参?a >本站 DEELX 正则引擎的说明文?/a>?/p>

4.2 如果要要求表辑ּ所匚w的内Ҏ(gu)整个字符Ԍ而不是从字符串中找一部分Q那么可以在表达式的首尾使用 "^" ?"$"Q比如:(x)"^\d+$" 要求整个字符串只有数字?/p>

4.3 如果要求匚w的内Ҏ(gu)一个完整的单词Q而不?x)是单词的一部分Q那么在表达式首?"\b"Q比如:(x)\b(if|while|else|void|int…?font color="#5050ff">)\b" 来匹配程序中的关键字?/p>

4.4 表达式不要匹配空字符丌Ӏ否则会(x)一直得到匹配成功,而结果什么都没有匚w到。比如:(x)准备写一个匹?"123"?123."?123.5"?.5" q几UŞ式的表达式时Q整数、小数点、小数数字都可以省略Q但是不要将表达式写成:(x)"\d*\.?\d*"Q因为如果什么都没有Q这个表辑ּ也可以匹配成功?a >更好的写法是Q?\d+\.?\d*|\.\d+"?/p>

4.5 能匹配空字符串的子匹配不要@环无限次。如果括号内的子表达式中的每一部分都可以匹?0 ơ,而这个括h体又可以匚w无限ơ,那么情况可能比上一条所说的更严重,匚wq程中可能死循环。虽然现在有些正则表辑ּ引擎已经通过办法避免?jin)这U情况出现死循环?jin),比?.NET 的正则表辑ּQ但是我们仍然应该尽量避免出现这U情c(din)如果我们在写表辑ּ旉C(jin)d@环,也可以从q一点入手,查找一下是否是本条所说的原因?/p>

4.6 合理选择贪婪模式与非贪婪模式Q参?a >话题讨论?/p>

4.7 ?"|" 的左右两边,Ҏ(gu)个字W最好只有一边可以匹配,q样Q不?x)因?"|" 两边的表辑ּ因ؓ(f)交换位置而有所不同?/p>

]]>[转]C#3.0新特?/title><link>http://m.tkk7.com/zqli/archive/2007/01/20/95071.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Sat, 20 Jan 2007 11:13:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/01/20/95071.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/95071.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/01/20/95071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/95071.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/95071.html</trackback:ping><description><![CDATA[ <p> <font color="#993300"> <strong>Q?Q用var声明变量</strong> </font> <br />js里是用var声明变量Q但两者不同的是,js里的变量没有cdQ数据才有类型,可以一个变量指向Q意的数据cd而运行自如?br />而C#3.0里在用var声明变量时必d其进行初始化Q这L(fng)译器能够Ҏ(gu)初始化的值知道该变量的类型,部分程序员要写的代码交l编译器d成。就是说每个变量的类型还是固定的?br />例如在C#3.0里可以这L(fng)接声明ƈ初始化变量:(x)<br /></p> <div id="ogo2g00" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#000000">var</font> (tng)<font color="#000000">tbTitle</font><font color="#000000">=</font><font color="#0000ff">new</font> (tng)<font color="#000000">System</font><font color="#000000">.</font><font color="#000000">Web</font><font color="#000000">.</font><font color="#000000">UI</font><font color="#000000">.</font><font color="#000000">WebControls</font><font color="#000000">.</font><font color="#000000">TextBox</font><font color="#000000">();</font></div> </div> <p>的确省写?jin)很多代码,呵呵。但是,如果你想把变量声明和初始化分开Q那var关键字就无能为力?jin)?/p> <p> <font color="#800000"> <strong>Q?Q直接构建对?br /></strong> </font>js里创建对象的快捷途径一直o(h)我很happyQ例如:(x)</p> <div id="acooug2" class="codeArea js"> <div style="COLOR: #000000"> <font color="#0000ff">var</font> (tng)<font color="#000000">book</font><font color="#000000">={</font><font color="#000000">title</font><font color="#000000">:</font><font color="#ff00ff">'bookTitle'</font><font color="#000000">,</font> (tng)<font color="#000000">author</font><font color="#000000">:</font><font color="#ff00ff">'nate'</font><font color="#000000">,</font> (tng)<font color="#000000">id</font><font color="#000000">:</font><font color="#000000">222</font><font color="#000000">};</font></div> </div> <p>现在C#3.0竟也有类似的语法?jin)?x)</p> <div id="eag0eaw" class="codeArea js"> <div style="COLOR: #000000"> <font color="#0000ff">var</font> (tng)<font color="#000000">book</font><font color="#000000">=</font><font color="#0000ff">new</font> (tng)<font color="#000000">{</font><font color="#000000">title</font><font color="#000000">=</font><font color="#ff00ff">"bookTitle"</font><font color="#000000">,</font> (tng)<font color="#000000">author</font><font color="#000000">=</font><font color="#ff00ff">"nate"</font><font color="#000000">,</font> (tng)<font color="#000000">id</font><font color="#000000">=</font><font color="#000000">222</font><font color="#000000">};</font></div> </div> <p>其实也是q译器做了(jin)更多的工作,在背后自己定义了(jin)一个类Q更多的原理解释大家自己google吧?/p> <p> <strong> <font color="#800000">Q?Q扩展方?/font> </strong> <br />js里给一个类扩展Ҏ(gu)也就是给prototype原型对象d一个方法,非常方便?br />现在C#3.0也提供了(jin)cM的功能,虽然偶觉得这个新Ҏ(gu)可能太灉|?jin)以臛_(jing)响C#的严谨性甚臌Y件架构方面的问题Q但是无疑这q是很吸引h的:(x)</p> <div id="aqswomu" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#0000ff">public</font> (tng)<font color="#0000ff">static</font> (tng)<font color="#000000">ToInt32</font><font color="#000000">(</font><font color="#0000ff">this</font> (tng)<font color="#000000">String</font> (tng)<font color="#000000">s</font><font color="#000000">){</font><br /> (tng)<font color="#0000ff">return</font> (tng)<font color="#000000">Convert</font><font color="#000000">.</font><font color="#000000">ToInt32</font><font color="#000000">();</font><br /><font color="#000000">}</font></div> </div> <p>在Q意一个类中定义上q静(rn)态方法,那么你的string对象有直接的ToInt32Ҏ(gu)?jin),是不是很方便Q?/p> <p> <strong> <font color="#800000">Q?Q创建对象时同时q行初始?/font> </strong> <br />同样是提供了(jin)一U简z的语法来初始化一个对象,例如Q?/p> <div id="kkycgyy" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#0000ff">public</font> (tng)<font color="#0000ff">class</font> (tng)<font color="#000000">Point</font><font color="#000000">{</font><br /> (tng)<font color="#0000ff">public</font> (tng)<font color="#0000ff">int</font> (tng)<font color="#000000">x</font><font color="#000000">;</font><br /> (tng)<font color="#0000ff">public</font> (tng)<font color="#0000ff">int</font> (tng)<font color="#000000">y</font><font color="#000000">;</font><br /><font color="#000000">}</font></div> </div> <p>可以q样实例化:(x)</p> <div id="gs2200s" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#000000">var</font> (tng)<font color="#000000">point</font><font color="#000000">=</font><font color="#0000ff">new</font> (tng)<font color="#000000">Point</font><font color="#000000">{</font><font color="#000000">x</font><font color="#000000">=</font><font color="#000000">100</font><font color="#000000">,</font><font color="#000000">y</font><font color="#000000">=</font><font color="#000000">200</font><font color="#000000">};</font></div> </div> <p>q样可以些多少构造函数啊Q呵?/p> <p> <strong> <font color="#800000">Q?Q方便声明集合对?/font> </strong> <br />以前对于数组可以直接声明时初始化Q?/p> <div id="q0qc0y0" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#000000">string</font> <font color="#000000">[]</font> (tng)<font color="#000000">s</font><font color="#000000">=</font><font color="#0000ff">new</font> (tng)<font color="#000000">string</font><font color="#000000">[]{</font><font color="#ff00ff">"red"</font><font color="#000000">,</font><font color="#ff00ff">"blue"</font><font color="#000000">,</font><font color="#ff00ff">"black"</font><font color="#000000">,</font><font color="#ff00ff">"white"</font><font color="#000000">};</font></div> </div> <p>而对于ArrayListq样的集合类型却没有z的语法Q只能通过Add之类的方法逐一dQ?br />而在C#3.0中,所有实现ICollection接口的类都有?jin)简z的初始化语法:(x)</p> <div id="asq2sca" class="codeArea js"> <div style="COLOR: #000000"> <font color="#0000ff">var</font> (tng)<font color="#000000">alColors</font><font color="#000000">=</font><font color="#0000ff">new</font> (tng)<font color="#000000">ArrayList</font><font color="#000000">{</font><font color="#ff00ff">"red"</font><font color="#000000">,</font><font color="#ff00ff">"blue"</font><font color="#000000">,</font><font color="#ff00ff">"black"</font><font color="#000000">,</font><font color="#ff00ff">"white"</font><font color="#000000">};</font></div> </div> <p> <strong> <font color="#800000">Q?QLambda表达?/font> </strong> <br />管委托?sh)?f)C#最新引入的一个概念非怼UQ它也是事g机制的基。但用v来却很麻?ch),怿每个写过的h都有体会(x)Q现在C#3.0通过Lambda表达式简化了(jin)q个q程?br />Lambda表达式的关键特征是将表达式或者语句块作ؓ(f)参数Q通过=>来直接定义一个委托,q个委托的类型会(x)Ҏ(gu)一pd的{换规则,q译器军_Q例如:(x)</p> <div id="gskguqq" class="codeArea cpp"> <div style="COLOR: #000000"> <font color="#000000">DemoDelegate</font> (tng)<font color="#000000">myDelegate</font> (tng)<font color="#000000">=</font> (tng)<font color="#000000">(</font> (tng)<font color="#000000">)</font> (tng)<font color="#000000">=></font> (tng)<font color="#000000">Console</font><font color="#000000">.</font><font color="#000000">WriteLine</font><font color="#000000">(</font> (tng)<font color="#ff00ff">"Hiya!!"</font> (tng)<font color="#000000">)</font> (tng)<font color="#000000">;</font></div> </div> <p>q里?)表示一个空参数的函敎ͼ后面的Console.WriteLine("Hiya!!");是函C。这样就很方便的实现?jin)委托的定义Q大家不妨回忆一下在C#1.1和C#2.0中是如何的麻?ch),呵呵?br />Lambda表达式不是那么容易理解,更多信息可以参见C#3.0的语a规范Q?br /><a >http://news.csdn.net/news/newstopic/26/26742.shtml</a></p> <p> <strong> <font color="#800000">Q?Q查询表辑ּ</font> </strong> <br />虽然我对Ruby?jin)解不多Q但L觉针寚w合的查询Q直接在语言中体玎ͼq种灉|来源于Ruby?br />于是C#3.0又多?jin)一诱人的Ҏ(gu),可以通过cMSql语句的方式来获得需要的数据Q结果可能存储于一个集合对象中或其他?br />同样Q没有能力三a两语其说清楚,参见规范Q?br /><a >http://news.csdn.net/news/newstopic/26/26747.shtml</a></p> <img src ="http://m.tkk7.com/zqli/aggbug/95071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-01-20 19:13 <a href="http://m.tkk7.com/zqli/archive/2007/01/20/95071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C#实现web信息自动抓取 http://m.tkk7.com/zqli/archive/2007/01/11/93251.html放水老?/dc:creator>放水老?/author>Thu, 11 Jan 2007 12:34:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/11/93251.htmlhttp://m.tkk7.com/zqli/comments/93251.htmlhttp://m.tkk7.com/zqli/archive/2007/01/11/93251.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/93251.htmlhttp://m.tkk7.com/zqli/services/trackbacks/93251.html出处Q?a >http://zkxp.cnblogs.com/archive/2006/04/24/383924.html

背景

随着Internet的普?qing),|络信息正以极高的速度增长Q在q么多数据中扑ֈ自己需要的信息是一件很J琐的事情,扑ֈ需要的信息后如何获取也是gȝ(ch)的事。这需要Internet信息抓取E序来代替h工的操作?/p>

所谓Internet信息抓取E序Q就是程序会(x)按照用户的关键词或关键网站来攉相应的信息,q提供给用户惌的信息格式?/p>

 (tng)

信息量的增加?x)带来信息网站发布h员工作量的剧增,为实C息发布系l实C息自

动发布、减工作h员工作量、即时跟t最C息,需要自动信息提供程序,因此Internet信息抓取E序应运而生?/p>

 (tng)

目标

 (tng)

实现自定义网站信息分cL取,存入本地数据库、生成静(rn)态页面或其它用户定义的信息结构,q下载与信息相关的多媒体文g?/p>

 (tng)

开?/p>

 (tng)

l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 目标站点l构分析

本步骤是准确抓取信息个关键?/p>

首先要选择更新频率高的面做ؓ(f)抓取地址Q然后分析要抓取内容面url特点?/p>

然后分析要抓取信息页面的元素Ҏ(gu),比如标题?sh)置Q内容位|?{,得到定位标记炏V?/p>

以上信息写成自q配置文g或存到数据库中?/p>

每个|站都需要分析,写出单独的配|文Ӟ供抓取程序用?/p>

 (tng)

l (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 信息提取

Ҏ(gu)配置文g取得要抓取页面urlQ用HttpWebRequestc获取内容:(x)

//获取http面函数

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) public string Get_Http(string a_strUrl,int timeout)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string strResult ; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl) ;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) myReq.Timeout = timeout;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) Stream myStream = HttpWResp.GetResponseStream () ;

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) StreamReader sr = new StreamReader(myStream , Encoding.Default);

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) StringBuilder strBuilder = new StringBuilder();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while (-1 != sr.Peek())

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) strBuilder.Append(sr.ReadLine()+"\r\n");

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) strResult = strBuilder.ToString();

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) catch(Exception exp)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) strResult = "错误Q? + exp.Message ;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return strResult ;

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

获取面内容后,分析面中连接地址取到要抓取的urlQ?/p>

//处理面标题和链?/p>

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) public string SniffWebUrl( string urlStr,string blockB,string blockE )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) { (tng) (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string urlch1 = "";

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string urlch2 = ""; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int end_n1 = 0;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int end_nums = 0;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int end_nums1 = 0;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int end_nums2 = 0;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int end_nums3 (tng) (tng) (tng) (tng) = 0; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string reUTStr = "";

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string reTitle = "";

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string ret = ""; (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) try

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int pos01 = urlStr.IndexOf( "." );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int pos02 = urlStr.LastIndexOf( "/" );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if( pos01 < 0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return "";

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if( pos02 < 0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) return "";

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int pos03 = urlStr.IndexOf( "/",pos01 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if ( pos03 < 0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) urlch1 = urlStr;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) urlch2 = urlStr;

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) else

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) urlch1 = urlStr.Substring( 0,pos03 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) urlch2 = urlStr.Substring( 0,pos02 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) string tmpAllStr = new PublicFun().Get_Http( urlStr ,time1);

 (tng)

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int pos1 = tmpAllStr.IndexOf( blockB );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) int pos2 = tmpAllStr.IndexOf( blockE,pos1 + blockB.Length );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) if ( pos1>0 && pos2>0 && pos2>pos1 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = tmpAllStr.Substring( pos1 + blockB.Length,pos2 - pos1 - blockB.Length );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( ret.IndexOf( "<" ));

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while( ret.IndexOf( "<A" ) >= 0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( 0,ret.IndexOf( "<A" ) ) + "<a" + ret.Substring( ret.IndexOf( "<A" ) + 2 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while( ret.IndexOf( "</A" ) >=0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( 0,ret.IndexOf( "</A" ) ) + "</a" + ret.Substring( ret.IndexOf( "</A" ) + 3 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while( ret.IndexOf( "Href=" ) >=0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( 0,ret.IndexOf( "Href=" )) + "href=" + ret.Substring( ret.IndexOf( "Href=" ) + 5 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while( ret.IndexOf( "HREF=" ) >=0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( 0,ret.IndexOf( "HREF=" )) + "href=" + ret.Substring( ret.IndexOf( "HREF=" ) + 5 );

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) }

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) while( ret.IndexOf( "href='" ) >=0 )

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) {

 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) ret = ret.Substring( 0,ret.IndexOf( "href='" )) + "href=\"" + ret.Substring( ret.IndexOf( "href='" ) + 6 ); (tng)



]]>
[转]设计模式之单态模? -http://m.tkk7.com/zqli/archive/2007/01/11/93166.html放水老?/dc:creator>放水老?/author>Thu, 11 Jan 2007 06:48:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/11/93166.htmlhttp://m.tkk7.com/zqli/comments/93166.htmlhttp://m.tkk7.com/zqli/archive/2007/01/11/93166.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/93166.htmlhttp://m.tkk7.com/zqli/services/trackbacks/93166.html设计模式之单态模?br />author: 李艳?br />date: 2005q?1??/p>

单态模式Singleton, 目的是保在调用期? 一个类只有一个实例存?
最典型的例子ؓ(f)数据库连? 数据库连接只需要一? 所以可以用单态模?
使用单态模式时, 创徏数据库连接的Ҏ(gu), 只能为静(rn)? q且要保证方法的同步, 否则在多U程操作? 有可能会(x)创徏多个实例.
CZ代码如下:

using System;
using System.Data.OleDb;
using System.Runtime.Remoting.Contexts;

[Synchronization()]
public class ConnectionClass
{
 (tng)private static OleDbConnection instance = null;
 (tng)private static string constring = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=singleton.mdb;Mode=Share Deny None;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";

 (tng)public static OleDbConnection GetInstance()
 (tng){
 (tng) (tng)if (instance == null)
 (tng) (tng){
 (tng) (tng) (tng)Console.WriteLine("Create new connection");
 (tng) (tng) (tng)instance = new OleDbConnection(constring);
 (tng) (tng)}
 (tng) (tng)return instance;
 (tng)}
}
public class Client
{
 (tng)public static void Main()
 (tng){
 (tng) (tng)OleDbConnection cn = ConnectionClass.GetInstance();
 (tng) (tng)cn.Open();
 (tng) (tng)cn = ConnectionClass.GetInstance();
 (tng) (tng)cn.Close();
 (tng)}
}



]]>
跨多H体传值C# Sessionhttp://m.tkk7.com/zqli/archive/2007/01/11/93073.html放水老?/dc:creator>放水老?/author>Thu, 11 Jan 2007 01:58:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/11/93073.htmlhttp://m.tkk7.com/zqli/comments/93073.htmlhttp://m.tkk7.com/zqli/archive/2007/01/11/93073.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/93073.htmlhttp://m.tkk7.com/zqli/services/trackbacks/93073.html
赋|(x)Session["UserName"]  (tng) =  (tng) UserName_Txt.Text; (tng) (tng) (tng)
? (tng)  (tng)  (tng)  (tng) Session.Add("UserName",UserName_Txt.Text); (tng) (tng) (tng)

if  (tng) (Session["UserName"]!=null) (tng) (tng)
 (tng) {  (tng)
 (tng)  (tng)  (tng)  (tng) do  (tng) something  (tng)
 (tng)  (tng)
 (tng) }

取|(x)string  (tng) UserName  (tng) =  (tng) QstringQSession["UserName"]Q?tng) (tng)?br />用完后消除Session的|以免费pȝ资源  (tng)
 (tng)  (tng)  (tng)  (tng)  (tng)  (tng)  (tng) Session.Remove("UserName")Q?tng)?




]]>
DataTable,DataView和DataGrid中一些容易؜淆的概念http://m.tkk7.com/zqli/archive/2007/01/08/92404.html放水老?/dc:creator>放水老?/author>Mon, 08 Jan 2007 08:18:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/08/92404.htmlhttp://m.tkk7.com/zqli/comments/92404.htmlhttp://m.tkk7.com/zqli/archive/2007/01/08/92404.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/92404.htmlhttp://m.tkk7.com/zqli/services/trackbacks/92404.html (tng) (tng)

]]>
H体DQForm1->Form2?qing)窗体间传?/title><link>http://m.tkk7.com/zqli/archive/2007/01/06/92171.html</link><dc:creator>放水老?/dc:creator><author>放水老?/author><pubDate>Sat, 06 Jan 2007 05:34:00 GMT</pubDate><guid>http://m.tkk7.com/zqli/archive/2007/01/06/92171.html</guid><wfw:comment>http://m.tkk7.com/zqli/comments/92171.html</wfw:comment><comments>http://m.tkk7.com/zqli/archive/2007/01/06/92171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zqli/comments/commentRss/92171.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zqli/services/trackbacks/92171.html</trackback:ping><description><![CDATA[用Form1表示原窗体,使用Form2表示新显C的H体Q它们之间存在“Form1->Form2”的D关系?br /><br />昄Form2有两U方?调用Form2的ShowҎ(gu)或调用ShowDialogҎ(gu)。ShowҎ(gu)Form2作ؓ(f)普通的H体昄出来Q而ShowDialogҎ(gu)则将其作为模式对话框q行昄。这两种Ҏ(gu)的区别在于,对ShowҎ(gu)的调用立卌回,Form1l箋(hu)执行ShowҎ(gu)调用后面的代码,而对ShowDialog的调用将被阻塞,直到Form2被关闭ؓ(f)止?br /><br />另外QShowDialogҎ(gu)昄对话框后q能接收C个返回|表示用户在对话框中进行操作的l果。只需在Form2中的恰当位置其自n的DialogResult属性设|ؓ(f)DialogResoult枚D的某个g一Q就可以关闭Form2q向Form1q回q个DialogResult倹{?br /><br /><br /><br />常用的窗体间属性、构造器之外的一U传递值的Ҏ(gu)Q?br /><br />可以在第一个窗体中定义一个static  (tng) public  (tng) 变量,用它来传递数? (tng) <br /> (tng) ?  (tng) <br /> (tng) Form1.cs文g?  (tng) <br /> (tng)  (tng) <br /> (tng) static  (tng) public  (tng) string  (tng) str;  (tng) <br /> (tng) private  (tng) Form2  (tng) frm  (tng) =  (tng) new  (tng) Form2();  (tng) <br /> (tng) private  (tng) void  (tng) button1_Click(object  (tng) sender,  (tng) System.EventArgs  (tng) e)  (tng) <br /> (tng) {  (tng) <br /> (tng) str  (tng) =  (tng) textBox1.Text;  (tng) <br /> (tng) frm.Show();  (tng) <br /> (tng) this.Hide();  (tng) <br /> (tng) }  (tng) <br /> (tng)  (tng) <br /> (tng) Form2.cs文g?  (tng) <br /> (tng)  (tng) <br /> (tng) private  (tng) void  (tng) Form2_Load(object  (tng) sender,  (tng) System.EventArgs  (tng) e)  (tng) <br /> (tng) {  (tng) <br /> (tng) textBox1.Text  (tng) =  (tng) Form1.str;  (tng) <br /> (tng) }  (tng) <br /> (tng)  (tng) <br /> (tng) 如果str被声明ؓ(f)  (tng) public  (tng) 而不? (tng) static  (tng) public  (tng) 则必d明一个Form1的实例才能?<img src ="http://m.tkk7.com/zqli/aggbug/92171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zqli/" target="_blank">放水老?/a> 2007-01-06 13:34 <a href="http://m.tkk7.com/zqli/archive/2007/01/06/92171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]DataGrid资料http://m.tkk7.com/zqli/archive/2007/01/04/91826.html放水老?/dc:creator>放水老?/author>Thu, 04 Jan 2007 11:31:00 GMThttp://m.tkk7.com/zqli/archive/2007/01/04/91826.htmlhttp://m.tkk7.com/zqli/comments/91826.htmlhttp://m.tkk7.com/zqli/archive/2007/01/04/91826.html#Feedback3http://m.tkk7.com/zqli/comments/commentRss/91826.htmlhttp://m.tkk7.com/zqli/services/trackbacks/91826.html

DataGrid资料

Posted on 2004-07-31 22:40 iCeSnaker 阅读(27359) 评论(23)  (tng)~辑 (tng)收藏引用|摘 所属分c? C#

关于datagrid的打?br />http://www.chinaaspx.com/article/csharp/295.htm

C#中ؓ(f)DataGridd下拉列表?br />http://www.cnblogs.com/icesnaker/archive/2004/09/21/45015.aspx

DataGrid也玩分页
http://dev.csdn.net/article/32/32339.shtm

DataGrid的正反双向排?br />
http://dev.csdn.net/develop/article/26/26817.shtm

DataGrid删除认?qing)Item颜色交替
http://dev.csdn.net/develop/article/26/26768.shtm

DataGrid常见解决Ҏ(gu)(?--在DataGrid中选择,认,删除多行复选框列表
http://dev.csdn.net/develop/article/26/26613.shtm

使用DataGrid动态绑定DropDownList
http://dev.csdn.net/develop/article/26/26590.shtm

DataGrid在分늊态下删除U录的问?br />http://dev.csdn.net/develop/article/26/26589.shtm

怎样使用DataGrid控g
http://dev.csdn.net/develop/article/26/26459.shtm

DataGrid Web控g深度历险(3) part1
http://dev.csdn.net/develop/article/26/26249.shtm

DataGrid Web控g深度历险(3) part2
http://dev.csdn.net/develop/article/26/26250.shtm

DataGrid Web控g深度历险(3) part3
http://dev.csdn.net/develop/article/26/26403.shtm

datagrid分页《非控g版?br />http://dev.csdn.net/develop/article/26/26002.shtm

datagrid分页问题Q前后蟩)(j)《控件版?br />http://dev.csdn.net/develop/article/26/26001.shtm

DataGrid Web控g深度历险(2) Part1
http://dev.csdn.net/develop/article/25/25948.shtm

DataGrid Web控g深度历险(1)
http://dev.csdn.net/develop/article/25/25816.shtm

DataGrid Web控g深度历险(2) Part2
http://dev.csdn.net/develop/article/25/25949.shtm

如何在DataGrid里面产生滚动条而不滚动题头
http://dev.csdn.net/develop/article/25/25538.shtm

使用?net 框架上的DataGrid數據分頁控g
http://dev.csdn.net/develop/article/25/25474.shtm

某一目录下的所有相同格式的 XML文gl定C同的DataGrid
http://dev.csdn.net/develop/article/25/25469.shtm

DataGridq接Access的快速分|Q?Q——实现快速分?br />http://dev.csdn.net/develop/article/25/25294.shtm

DataGridq接Access的快速分|Q?Q——动态生成SQL语句
http://dev.csdn.net/develop/article/25/25293.shtm

DataGridq接Access的快速分|Q?Q——SQL语句的选用Q降序)(j)
http://dev.csdn.net/develop/article/25/25291.shtm

DataGridq接Access的快速分|Q?Q——SQL语句的选用Q升序)(j)
http://dev.csdn.net/develop/article/25/25290.shtm

DataGridq接Access的快速分|Q?Q——需求与现状
http://dev.csdn.net/develop/article/25/25288.shtm

昄DataGrid序号的一个适用的方?br />http://dev.csdn.net/develop/article/25/25113.shtm

常见 Datagrid 错误(other)
http://dev.csdn.net/develop/article/24/24460.shtm

XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例?br />http://dev.csdn.net/develop/article/24/24441.shtm

利用radio实现Datagrid的单?br />http://dev.csdn.net/develop/article/24/24295.shtm

重画pd:DataGridColumnStyle之测试代?br />http://dev.csdn.net/develop/article/24/24191.shtm

OleDbDataAdapterl定到Winform下的DataGrid
http://dev.csdn.net/develop/article/24/24148.shtm

去除Asp:DataGrid中无用ViewState的方法(2Q?br />http://dev.csdn.net/develop/article/23/23671.shtm

去除Asp:DataGrid中无用ViewState的方法(1Q?br />http://dev.csdn.net/develop/article/23/23670.shtm

datagrid保存时无法提交更新的问题
http://dev.csdn.net/develop/article/23/23376.shtm

DBF,XLS,XML,MDB文g导入C#DataGrid的方?br />http://dev.csdn.net/develop/article/23/23036.shtm

动态创建DataGrid的模版列
http://dev.csdn.net/develop/article/22/22942.shtm

DataTable中数据记录的l计
http://dev.csdn.net/develop/article/22/22710.shtm

QASP.NETQ用动态属性和DataView实现DataGrid的双向排?br />http://dev.csdn.net/develop/article/22/22513.shtm

如何同步滚动两个相同的DataGrid
http://dev.csdn.net/develop/article/22/22438.shtm

asp.net中DataGrid性能试
http://dev.csdn.net/develop/article/22/22405.shtm

让Asp.NET的DataGrid可排序、可选择、可分页
http://dev.csdn.net/develop/article/22/22297.shtm

DataGrid传统分页方式
http://dev.csdn.net/develop/article/21/21997.shtm

在后代码里创建DataGrid控g
http://dev.csdn.net/develop/article/21/21934.shtm

实现cMWindows资源理器的DataGrid
http://dev.csdn.net/develop/article/21/21933.shtm

ASP.net中的Datagrid自定义分功?br />http://dev.csdn.net/develop/article/21/21875.shtm

在Pocket PC应用E序中用DataGrid控g
http://dev.csdn.net/develop/article/21/21844.shtm

创徏可拖动列的DataGridQ?Q?br />http://dev.csdn.net/develop/article/21/21594.shtm

创徏可拖动列的DataGrid
http://dev.csdn.net/develop/article/21/21593.shtm

DataGrid和CheckBox的؜合?br />http://dev.csdn.net/develop/article/21/21585.shtm

利用SessionU录datagrid模板列中CheckBox的状?br />http://dev.csdn.net/develop/article/21/21294.shtm

DataGrid模板列中TextBox的焦点相应键盘(sh)?br />http://dev.csdn.net/develop/article/21/21290.shtm

lDataGridd定删除的功?br />http://dev.csdn.net/develop/article/20/20892.shtm

如何lDataGridd自动增长?br />http://dev.csdn.net/develop/article/20/20887.shtm

如何利用RadioButtonList实现datagrid列的单?br />http://dev.csdn.net/develop/article/20/20789.shtm

锦上添花DataGridQ?br />http://dev.csdn.net/develop/article/20/20770.shtm

ASP.Net WebMatrix中Datagrid使用模板列对数据昄q行排版
http://dev.csdn.net/develop/article/20/20576.shtm

格式?DataGrid 输出
http://dev.csdn.net/develop/article/20/20307.shtm

如何实现单击在DATALIST(DATAGRID)的HEADER加入的CHECKBOX,q行DATALIST(DATAGRID)中的CHECKBOX列全选或全不?br />http://dev.csdn.net/develop/article/20/20290.shtm

向datagrid中加横向 U向的合?Q在datatable中实玎ͼdatatable间倒数据)(j)
http://dev.csdn.net/develop/article/20/20221.shtm

ZADO+Adodc控g+DataGrid控g制作的一个数据库~辑E序Q完整原E序Q?br />http://dev.csdn.net/develop/article/19/19600.shtm

如何实现自定义及(qing)自动逐页打印DataGrid昄的内?br />http://dev.csdn.net/develop/article/19/19353.shtm

合ƈdatagrid中内容相同的单元?br />http://dev.csdn.net/develop/article/19/19122.shtm

创徏固定表头、表g滚动的DataGrid
http://dev.csdn.net/develop/article/18/18972.shtm

创徏跨多列、多行表头的DataGrid
http://dev.csdn.net/develop/article/18/18971.shtm

在DataGrid中添加一个合计字D?br />http://dev.csdn.net/develop/article/18/18856.shtm

在DataGrid里添加确认删除的对话?br />http://dev.csdn.net/develop/article/18/18838.shtm

为DataGridd自动~号功能
http://dev.csdn.net/develop/article/18/18783.shtm

格式化DataGrid的例子【将数据源中?,1D{换成实际的文字?br />http://dev.csdn.net/develop/article/18/18782.shtm

Henry手记—Web Form中的Datagrid的自定义分页
http://dev.csdn.net/develop/article/18/18760.shtm

创徏完全可编辑的 DataGrid
http://dev.csdn.net/develop/article/18/18744.shtm

DataGrid控g通用打印c?br />http://dev.csdn.net/develop/article/18/18711.shtm

为DataGriddCheckBox控g
http://dev.csdn.net/develop/article/18/18615.shtm

VB.NET中关于DataGrid颜色的自定义
http://dev.csdn.net/develop/article/18/18512.shtm

在DataGrid快速添加新?br />http://dev.csdn.net/develop/article/18/18487.shtm

Henry手记QDatagrid事g响应(?
http://dev.csdn.net/develop/article/18/18315.shtm

datagrid技巧之一Q代码控刉中行的颜色
http://dev.csdn.net/develop/article/17/17852.shtm

在C#里实现DATAGRID的打印预览和打印
http://dev.csdn.net/develop/article/17/17851.shtm

Binding a DataGrid to an ADO Recordset
http://dev.csdn.net/develop/article/17/17850.shtm

Creating DataGrid Templated Columns Dynamically - Part II
http://dev.csdn.net/develop/article/17/17846.shtm

Creating DataGrid Templated Columns Dynamically - Part I
http://dev.csdn.net/develop/article/17/17845.shtm

DataTable,DataView和DataGrid中一些容易؜淆的概念
http://dev.csdn.net/develop/article/17/17840.shtm

动态的理ASP.NET DataGrid数据?br />http://dev.csdn.net/develop/article/17/17599.shtm

Henry手记QDatagrid键盘?sh)g响应Q二Q?br />http://dev.csdn.net/develop/article/17/17424.shtm

Henry手记—从Datagrid的标题居中说?br />http://dev.csdn.net/develop/article/17/17053.shtm

用嵌套的DataGrid实现M式表的显C?br />http://dev.csdn.net/develop/article/16/16960.shtm

DataGrid中嵌套用Repeater
http://dev.csdn.net/develop/article/16/16834.shtm

Henry手记 Q?Datagrid键盘?sh)g响应Q一Q?br />http://dev.csdn.net/develop/article/16/16572.shtm

ldatagrid控g建立E_的双向排?asp.net)
http://dev.csdn.net/develop/article/16/16563.shtm

asp.netW记(datasetQdatagrid)
http://dev.csdn.net/develop/article/16/16528.shtm

d一个下拉框到DataGrid
http://dev.csdn.net/develop/article/16/16434.shtm

DataSet导出CSV格式(ASP.NET,C#)
http://dev.csdn.net/develop/article/16/16311.shtm

Henry手记QDatagrid事g响应
http://dev.csdn.net/develop/article/16/16273.shtm

Henry手记QWinForm Datagridl构剖析Q三Q用代?br />http://dev.csdn.net/develop/article/16/16088.shtm

Henry手记QWinForm Datagridl构剖析Q三Q类代码
http://dev.csdn.net/develop/article/16/16087.shtm

Henry手记QWinForm Datagridl构剖析Q三Q?br />http://dev.csdn.net/develop/article/16/16086.shtm

ADO在vb.net中的使用Q与datagridl合Q?br />http://dev.csdn.net/develop/article/15/15975.shtm

Henry手记QWinForm Datagridl构剖析Q二Q程?br />http://dev.csdn.net/develop/article/15/15929.shtm

Henry手记QWinForm Datagridl构剖析Q二Q?br />http://dev.csdn.net/develop/article/15/15928.shtm

ASP.NET中的DataGrid的属?br />http://dev.csdn.net/develop/article/15/15920.shtm

EnableViewState="false"的DataGrid分页
http://dev.csdn.net/develop/article/15/15913.shtm

Datagrid 链接数据库Access
http://dev.csdn.net/develop/article/15/15861.shtm

DataGrid 链接Access数据?br />http://dev.csdn.net/develop/article/15/15860.shtm

Henry手记:WinForm Datagridl构剖析Q一Q?br />http://dev.csdn.net/develop/article/15/15686.shtm

把Excel文g中的数据d到DataGrid?br />http://dev.csdn.net/develop/article/15/15544.shtm

如何创徏一个用弹出H口来查看详l信息的链接列
http://dev.csdn.net/develop/article/15/15456.shtm

DataGrid使用技巧(四)(j)
http://dev.csdn.net/develop/article/15/15282.shtm

DataGrid使用技巧(三)(j)
http://dev.csdn.net/develop/article/15/15220.shtm

DataGrid使用技巧(二)(j)
http://dev.csdn.net/develop/article/15/15139.shtm

DataGrid使用技?一)
http://dev.csdn.net/develop/article/15/15109.shtm

奇?DataGrid
http://dev.csdn.net/develop/article/14/14114.shtm

使用c#+(datagrid控g)~辑xml文g
http://dev.csdn.net/develop/article/13/13333.shtm

在DataGrid中创Z个弹出式DetailsH口
http://dev.csdn.net/develop/article/12/12170.shtm

在DataGrid中创Z个弹出式DetailsH口
http://dev.csdn.net/develop/article/12/12099.shtm

vs.net beta 2中利用DataGrid分页详解
http://dev.csdn.net/develop/article/11/11009.shtm

使用 ASP+ DataGrid 控g来创Z视图/详细资料视图 Q?Q?br />http://dev.csdn.net/develop/article/1/1865.shtm

使用 ASP+ DataGrid 控g来创Z视图/详细资料视图
http://dev.csdn.net/develop/article/1/1864.shtm



]]>
[转] 单宜用的|站?rn)态化思\?qing)代码分?http://m.tkk7.com/zqli/archive/2006/12/18/88631.html放水老?/dc:creator>放水老?/author>Mon, 18 Dec 2006 12:41:00 GMThttp://m.tkk7.com/zqli/archive/2006/12/18/88631.htmlhttp://m.tkk7.com/zqli/comments/88631.htmlhttp://m.tkk7.com/zqli/archive/2006/12/18/88631.html#Feedback0http://m.tkk7.com/zqli/comments/commentRss/88631.htmlhttp://m.tkk7.com/zqli/services/trackbacks/88631.html出处:http://www.net2china.net/blog/user1/sunychen/archives/2006/226.html

?rn)态化是有很大好处的。最值得U道的应该是加快下蝲速度,更利于搜索引擎的抓取,q两点对一个企业网站来说应该比较重要吧?/font>
 (tng)
一般的?rn)态化是通过fsolgd|站模板的内容,然后替换其中的特定字W,生成?rn)态页面,q是个不错的x(chng)Q如果你要自己写一个网站,你用q种办法Q因为比较稳定。而且如果想以后更换网站界面也相当Ҏ(gu)Q只需修改模板而无需更改E序。这个办法很多高手已l说得很明白?jin),推荐一个:(x)
http://www.jingzhengli.cn/Blog/zjh/265.html
 (tng)
然而很不幸Q很多公司的|站已经做好Q而且每一都是html中夹杂大量asp代码的Ş式,没有模板Q功能也没有模块化,如果想仍用以上方法进行静(rn)态化处理Q其复杂E度相当于重做一个网站?/font>
 (tng)
提出一个简单宜用的解决办法。不用模ѝ不用修改程序,非常便捷。利用XMLHTTP对象?qing)其?gu)。他的原理是已有的asp|页内容一ơ性读取出来,然后写到?rn)态页中,实现|站的静(rn)态化重构?/font>
 (tng)
现在以生?www.rocky-glass.com的首ؓ(f)例,介绍一下这U方法,代码如下Q?/font>
 (tng)
Url="http://www.rocky-glass.com/default.asp" ?span style="COLOR: red">定义动态首?/span>
wstr = GetPage(Url) ?span style="COLOR: red">把动态首늚内容全部d出来
 (tng)
Set fs=Server.CreateObject("Scripting.FileSystemObject")
 (tng)
Set CrFi=fs.CreateTextFile(server.MapPath("../")&"\index.htm") ?span style="COLOR: red">创徏?rn)态首?/span>index.htm
CrFi.Writeline(wstr) ?span style="COLOR: red">读取出的内容写入静(rn)态页?/span>
set CrFi=nothing ?span style="COLOR: red">关闭两个对象
set fs=nothing
 (tng)
以下两个函数涉及(qing)到xmlhttp对象和方法的使用Q如果能看懂qQ看不懂直接调用p?/font>
Function GetPage(url) ‘此q程的功能是实现?/span> asp |页的内容一ơ性读取出来?/span>
dim Retrieval
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False ', "", ""
.Send
GetPage = BytesToBstr(.ResponseBody)
End With
Set Retrieval = Nothing
End Function
 (tng)
Function BytesToBstr(body) ‘字W{?/span>
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = "utf-8" ?span style="COLOR: red">如果是中文页面请?/span>gb2312.Q英文页面用utf-8
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
 (tng)
首页的静(rn)态化完成了(jin)Q生成ؓ(f) index.htm q个?rn)态页Q其他的面也可以按照这个思\q行Q利用不同的后缀id|可以批量生成所有网c(din)?/font>
 (tng)
两点注意Q?、如果是扚w生成面要保证网速,否则E序的运行很Ҏ(gu)出服务器的允许旉?/font>
 (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) (tng) 2、生成英文页面的时候,要保证原面上没有汉字或其他语言Q否则生成出错?/font>
 (tng)
q种?rn)态化相对比较Ҏ(gu)Q尤其是那些寚w些写的很差劲的网站进行静(rn)态化处理。我一直用q种Ҏ(gu)l企业静(rn)态化处理?/font>
有机?x)我会(x)把q种Ҏ(gu)q一步写成类Q方便各位网友调用?/font>
 (tng)
下边说说两种骗h的静(rn)态化Ҏ(gu)Q引起各位注意?/font>
1、?/span>框架伪静(rn)?q种是非常简单而且也是非常便于识别?它的原理比较?是做一个静(rn)态的L枉?然后把动态的内容铑օ副框架内,q个单从它的URL可以看出眉?如果整个|站的URL都是一L(fng),那么׃定是框架伪静(rn)态的。这U所谓的?rn)态化不仅达不C化的目的Q而且q(sh)如不优化?/font>
2、?/span>利用lg把asp的辍昄为htm,它主要是利用一个组件强制性的把asp文g的后辍显CZؓ(f)htm,比较有名的组件是MOD REWRITEQ这U东西只是在形式上让你感觉已l静(rn)态化?jin),其实仍然是执行动态网c(din)识别这个也比较Ҏ(gu)Q那是看看有没有生成静(rn)态页是?jin)。如果没有生成静(rn)态页Q显然是骗h的,因ؓ(f)只有动态页才是虚拟的,从数据库中调用数据进行显C,而静(rn)态页面一定是独立的。当?dng)利用q种Ҏ(gu)可以起到seo优化作用Q但是对讉K速度来说Q是一Ҏ(gu)高都没有的,而且q有可能降低讉K速度?/font>
 (tng)

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1444169



]]>
[转] 用C#生成随机中文汉字验证码的基本原理 http://m.tkk7.com/zqli/archive/2006/10/28/77853.html放水老?/dc:creator>放水老?/author>Sat, 28 Oct 2006 14:19:00 GMThttp://m.tkk7.com/zqli/archive/2006/10/28/77853.htmlhttp://m.tkk7.com/zqli/comments/77853.htmlhttp://m.tkk7.com/zqli/archive/2006/10/28/77853.html#Feedback2http://m.tkk7.com/zqli/comments/commentRss/77853.htmlhttp://m.tkk7.com/zqli/services/trackbacks/77853.html阅读全文

]]>
վ֩ģ壺 ɫˬŮС˵ѿ| ɫҹƵ| ձַȫ߹ۿ| AVרAVѿ| 4444wwwѿ| ޾Ʒ99þ| ڵƵ | ǴýƵѹۿ| ԻƤȫƵѹ30| ޳aƬ߿| þòþüĻ| ҹ߲| Ʒþþþþþ | Ƶվ߹ۿ| ڵɫƵƵ| þþ޾ҺҺҺ | aëƬƵ| պ Ļ| ѿĻɫƬ| ޾ƷŮþþþ | йһػƵƬ| ޾Ʒ벻߲HE| ˾þAV| ŷղ| ëƬƵ| ɫwwwƵ߹ۿ| ޾Ʒþһ| ƷþþþóѶ| ձһ߲Ͷ | ߾Ʒ| VƬ߲| AVһþ| Aѹۿ| AVרAV| Ʒһ߲| պѵӰַ| ŷպ޾Ʒ| ޹Ʒþþþ| aëƬվ | þ޹ҹƷƬ| 99þþþƷѹۿ|