??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日本一区二区,日韩电影在线观看完整版,亚洲福利国产http://www.aygfsteel.com/zqli/category/12937.html为学日益Qؓ道日损?/description>zh-cnThu, 17 Jan 2008 15:03:20 GMTThu, 17 Jan 2008 15:03:20 GMT60[转]C#泛型~程 http://www.aygfsteel.com/zqli/archive/2008/01/17/175983.html放水老?/dc:creator>放水老?/author>Thu, 17 Jan 2008 08:17:00 GMThttp://www.aygfsteel.com/zqli/archive/2008/01/17/175983.htmlhttp://www.aygfsteel.com/zqli/comments/175983.htmlhttp://www.aygfsteel.com/zqli/archive/2008/01/17/175983.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/175983.htmlhttp://www.aygfsteel.com/zqli/services/trackbacks/175983.html泛型Q通过参数化类型来实现在同一份代码上操作多种数据cd。利?#8220;参数化类?#8221;类型抽象化Q从而实现灵zȝ复用?/span>

例子代码Q?/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果是:

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

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

泛型机制Q?/span>

泛型能力有CLR在运行时支持QC#泛型代码在编译ؓIL代码和元数据Ӟ采用Ҏ的占位符来表C型类型,q用专有的IL指o支持泛型操作。而真正的泛型实例化工作以“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编译器只ؓTest<T>cd产生“泛型?#8221;的IL代码与元数据——ƈ不进行泛型的实例化,T在中间只充当占位W。例如:Testcd元数据中昄?lt;!T>

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

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

泛型特点Q?/span>

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

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

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

泛型l承Q?/span>

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

非法

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

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

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

 

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

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

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

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

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

、C#泛型要求?#8220;所有泛型类型或泛型Ҏ的类型参?#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中的公有Ҏ。例如:在开始的例子中,定义的那个obj成员变量。比如我们在开始的那个例子中加入一个Test1c,在它当中定义两个公共ҎFunc1、Func2Q如下图Q?/span>



下面开始分析这些约束:

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写入了一个有参构造器Q得系l不会再为B自动创徏一个无参的构造器Q但是如果我们将Bcd中加一个无参构造器Q那么对象d的实例化׃会报错了。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++在编译时所支持的静态模板,也不同于Java在编译器层面使用“擦拭?#8221;支持的简单的泛型?/span>

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

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



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

无法昄 XML c?

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




DataTable.Compute Ҏ
2007-03-22 17:53
.
DataTable.Compute Ҏ  

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

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


Visual BasicQ声明)
Public Function Compute ( _
                 expression As String, _
                 filter As String _
            ) As Object
            
Visual BasicQ用法)
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设|ؓ计算l果?

备注

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

Count(Quantity)

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

Sum (Quantity * UnitPrice)

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

"Quantity * UnitPrice"

Compute Ҏ的表辑ּ参数ؓQ?

Sum(total)

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

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

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

下面的示例针对识别号码ؓ五的销售h员,对名?#8220;Total”Q合计)的列的值求和?/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://www.aygfsteel.com/zqli/archive/2007/10/12/152312.html放水老?/dc:creator>放水老?/author>Fri, 12 Oct 2007 05:14:00 GMThttp://www.aygfsteel.com/zqli/archive/2007/10/12/152312.htmlhttp://www.aygfsteel.com/zqli/comments/152312.htmlhttp://www.aygfsteel.com/zqli/archive/2007/10/12/152312.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/152312.htmlhttp://www.aygfsteel.com/zqli/services/trackbacks/152312.html
半天Q把label转换为Button控gcdQ问题解冟?

]]>
用VS2005制作WinForm安装?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/06/26/126431.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/126431.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/06/26/126431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/126431.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zqli/services/trackbacks/126431.html</trackback:ping><description><![CDATA[<p>一.<br><br>1. 在现有项目的解决Ҏ中添加新的项? 叛_"解决Ҏ",选择"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. 另外, ?解决Ҏ理?? 点击你添加的安装目, ?属?~辑栏中, 在[Manufacturer]中填入你公司的名字或者你自己希望的文? 在[ProductName]填入你ؓ要被安装的项目命名的名字.<br>5. 先在"解决Ҏ理??生成"你的目, 然后"生成"你的安装目<br>6. ?解决Ҏ理??叛_你的安装目, 选择"安装", 便可在你的开发机上进行安装了, 在你的安装项目的路径下的bin下有两个文g? debug ?nbsp;Release, <br>7. 在解x案管理器?叛_你的安装目, 选择"属?, 如果你的目属性里选择的是 "配置" ?nbsp;"debug", 则你生成的安装文件在 debug 里面, 如果选择?配置"?nbsp;"Release", 则生成的安装文g?nbsp;Release 里面. 当然你也可以修改你的位置可文件名, q可以对你的安装文gq行其它的设|?<br><br>?<br>在解x案管理器? 叛_d?安装目", 选择"视图"--"注册?; </p> <p> </p> <p>?目标计算Z的注册表"?默认有注册表的五个主键栏;<br>默认情况? ?nbsp;[HKEY_CURRENT_USER] ?nbsp;[HKEY_CURRENT_MACHINE] 下会?nbsp;[Software]\[Manufacturer] 分支, 如果你的安装目的属性中讄?nbsp;[Manufacturer]? 安装后会用值去替代[Manufacturer], 例如 [Manufacturer] 的?nbsp;讄?nbsp;"Power Word", 则安装后会在 [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://www.aygfsteel.com/zqli/aggbug/126431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-06-26 22:36 <a href="http://www.aygfsteel.com/zqli/archive/2007/06/26/126431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]轻而易举拥有xp风格的界?http://www.aygfsteel.com/zqli/archive/2007/06/26/126273.html放水老?/dc:creator>放水老?/author>Tue, 26 Jun 2007 02:16:00 GMThttp://www.aygfsteel.com/zqli/archive/2007/06/26/126273.htmlhttp://www.aygfsteel.com/zqli/comments/126273.htmlhttp://www.aygfsteel.com/zqli/archive/2007/06/26/126273.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/126273.htmlhttp://www.aygfsteel.com/zqli/services/trackbacks/126273.htmlq篇文章主要参考了http://www.codeproject.com/csharp/dotnetvisualstyles.asp
跟随下面的步骤,使您的程序拥有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命名?[您的E序名].exe.manifestQ[您的E序名]指的是在 ..\bin\debug 文g多w生成的可执行E序?。文件的内容CZ如下Q您只要Ҏ您在AssemblyInfo.cs里所作的讄修改 version="1.0.0.0", name="abc", abc q几个值就可以了?/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. ?[您的E序名].exe.manifest 文gd到程序的可执行文?br>Q?Q菜单文件打开Q打开..\bin\debug\[您的E序名].exeQ现在您可以看到一个资源浏览树Q?br>Q?Q右L目录[您的E序名]Q单?d资源..."Q?br>Q?Q在跛_的对话框中单?#8220;自定?..”Q?br>Q?Q将资源cd命名为RT_MANIFESTQ确定;
Q?Q双击资源树的RT_MANIFEST下的(一般情况下?01Q,Copy 文g [您的E序名].exe.manifest 的内容,_脓在打开的文件中Q粘贴的l果是二q制形式Q结果有点奇怪,不用理会Q?/font>


]]>
[转]Skin++ For C#.Net2005使用帮助http://www.aygfsteel.com/zqli/archive/2007/06/26/126253.html放水老?/dc:creator>放水老?/author>Tue, 26 Jun 2007 01:41:00 GMThttp://www.aygfsteel.com/zqli/archive/2007/06/26/126253.htmlhttp://www.aygfsteel.com/zqli/comments/126253.htmlhttp://www.aygfsteel.com/zqli/archive/2007/06/26/126253.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/126253.htmlhttp://www.aygfsteel.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。注册命令:RegSvr32.exe  Skin++存在的\?/span>\SkinPPDotNet.dll 注册后会出现下图所C:

      

 

 

二?/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)”菜单,此时会弹?#8220;d引用”H体,如下图:

      

      

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

 

4.d名字I间

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

    

 

 

    5.声明Skin++lg变量

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

      

 

       6.创徏Skin++lg实例

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

SkinPPObj = new SkinPPDotNetClass();

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

             

       xQ?/span>Skin++添加完成了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心的朋友也怼注意刎ͼ我们?/span>Application.EnableVisualStyles();q句话注释掉了。原因是Skin++已经?span>C#所有的控gq行了彻底的换肤Q所以在q个地方应该?span>C#默认的美化工作停止掉Q这样可以提升显C效率?/span>



]]>
.NetFrameWork?Compact NetFrameWork中Combox控g的区?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/04/26/113850.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/113850.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/04/26/113850.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/113850.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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://www.aygfsteel.com/zqli/aggbug/113850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-04-26 17:08 <a href="http://www.aygfsteel.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://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/04/26/113847.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/113847.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/04/26/113847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/113847.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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>注:customerByLivingPlace1指向rpt?br><br><br><strong>WebFormQ?/strong><br> 首先,Zd方便,数据库的用户名和密码先写到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://www.aygfsteel.com/zqli/aggbug/113847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-04-26 17:01 <a href="http://www.aygfsteel.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://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/03/27/106685.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/106685.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/03/27/106685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/106685.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zqli/services/trackbacks/106685.html</trackback:ping><description><![CDATA[ <p>自定义DataGrid的列宽,数据源ƈ非直接从DataSet直接拖过来,而是动态添加,不多_部分代码如下Q?br /><br />//重绘DataGrid的每个列</p> <p>            DataGridTableStyle ts = new DataGridTableStyle();<br />            ts.MappingName = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.TableName; //如果l定的是Datatable,q里要变一下 ?<br />            int numCols = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.Columns.Count;<br />            int i = 0;<br />            DataGridTextBoxColumn aColumnTextColumn;<br />            while (i < numCols)   //重绘所有的列 ?<br />            {<br />                aColumnTextColumn = new DataGridTextBoxColumn();<br />                aColumnTextColumn.MappingName = RealEstatePDA.Util.DataBase.DataViews.getInstance().BuildingLocationDataView.Table.Columns[i].ColumnName;<br />                ts.GridColumnStyles.Add(aColumnTextColumn);     //增加一U自定义的column风格   <br />                i++;<br />            }</p> <p>            this.HousedataGrid.TableStyles.Add(ts);</p> <p>            this.HousedataGrid.TableStyles[0].GridColumnStyles[0].Width = 70;   //W一列的宽度   <br />            this.HousedataGrid.TableStyles[0].GridColumnStyles[0].HeaderText = "房屋~号"; //W一列的标题   <br />            this.HousedataGrid.TableStyles[0].GridColumnStyles[1].Width = 200;   //W二列的宽度   <br />            this.HousedataGrid.TableStyles[0].GridColumnStyles[1].HeaderText = "YYYYY"; //W二列的标题   </p> <p>            this.HousedataGrid.Refresh();     </p> <p> <br />           //<br /><br /><br /><br /><br />相类似的另一U样式:<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://www.aygfsteel.com/zqli/aggbug/106685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-03-27 16:08 <a href="http://www.aygfsteel.com/zqli/archive/2007/03/27/106685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]C#的四个基本技?http://www.aygfsteel.com/zqli/archive/2007/03/13/103526.html放水老?/dc:creator>放水老?/author>Tue, 13 Mar 2007 06:20:00 GMThttp://www.aygfsteel.com/zqli/archive/2007/03/13/103526.htmlhttp://www.aygfsteel.com/zqli/comments/103526.htmlhttp://www.aygfsteel.com/zqli/archive/2007/03/13/103526.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/103526.htmlhttp://www.aygfsteel.com/zqli/services/trackbacks/103526.html1Q如果可能尽量用接口来~程

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

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늨序了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不够的话,数据?NETcdh持ICollection接口。用接口写的q个函数不用需改就可以才许多中情况下用?

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

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

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

  q里q有l护斚w的因素应当注意:管操作两者的Ҏ是一LQ但是你把一个数据元素变成属性,那么原先客户端的E序便不能访问服务端的新版本E序了。实际上对于在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中对于一些变量声明加入了initializer的概c它们在构造函C前被执行Q实际上变量在基cȝ构造函数执行前之前被初始化?

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



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

]]>
调用.NET库,制作鼠标右键弹出菜单?/title><link>http://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/03/09/102809.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/102809.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/03/09/102809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/102809.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zqli/services/trackbacks/102809.html</trackback:ping><description><![CDATA[        可以从工h上拖个ContextMenu控g下来Qƈ~辑好,然后把你所需要添加ContextMenu的控件的ContextMenu属性设个右键菜单;除了上脓所q的ҎQ您也可以通过手工d代码来实现弹出式菜单。关键的cLContextMenucR该cL两个构造函敎ͼ其中ContextMenu()生成一个不含Q何菜单项的弹出式菜单QContextMenu(MenuItem[]   menus)生成一个包括参C所指定的菜单项的弹出式菜单。如要给一个按钮控件button1d弹出式菜单,可以参考以下的代码Q?  <br />    <br />  ContextMenu   Menu1=new   ContextMenu();     <br />  Menu1.MenuItems.Add(new   MenuItem(“弹单一"));     <br />  Menu1.MenuItems.Add(new   MenuItem(“弹单二"));     <br />  button1.ContextMenu=Menu1;   <br />    <br />  ContextMenu有几个关键的属性、方法和事gQ可以帮助您定制弹出式菜单,属性RightToLeft可以使菜单项从右到左寚wQ属性SourceControlq回一个ControlDC当前所昄弹出菜单对应的控件。Show()Ҏ可以使程序主动显C弹单。当弹出菜单弹出时将引发一个Popup事gQ你可以在该事g的响应方法中q行一些处理弹出菜单昄前做一些操作?  <br />    <br />  您还可以参考MSDN中给出的一个示例来定制弹出式菜单:   <br />  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsContextMenuClassTopic.asp <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>  <img src ="http://www.aygfsteel.com/zqli/aggbug/102809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-03-09 14:03 <a href="http://www.aygfsteel.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://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/02/02/97404.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/97404.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/02/02/97404.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/97404.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.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几天心血来潮 惛_一?C/SE序 一入门遇到这个问?我在 登陆H体?NEW?一个新H体吧新H体Show?之后 原来得窗体cLOSE。新NEW得窗体也关闭? 不知道ؓ什?h? 另求 C/SE序?设计Ҏ? 比如如何处理 公共得变?{应该注意得事情 希望大家不吝赐教 </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如果您懂,请不怜赐教。]) 信誉: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之后查那里,如果有值就使用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体是那个窗体了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">xQ学习中 </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体,如果你在它里面调用了this.close();你想?ȝ体都关了,别的?皮之不存,毛将焉附! 把loginform作ؓ子窗?通过ȝ体了掉子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 真的没有其他的办法了? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?lovefootball(蟑螂Q生zd是扯?-做h要放低姿态)) 信誉: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">上面已经说清楚了 如果你不想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(以ؓ喜欢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? 其他的我׃会了 </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();Ҏ才是正解. 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">准确的说,做ؓ启动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(让代码ؓ你写代码) 信誉: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样Ҏ不存在谁打开? </pre> <hr style="COLOR: #c1cdd8; HEIGHT: 1px" /> <p>{?Samen168(让代码ؓ你写代码) 信誉: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">Ҏ </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">上面能说的都讲了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">学习 </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表示本窗体ؓ其父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刚好前几天解决的)Q? 你在原来的窗体设|一个public bool bNew=false;的变量,在你要new新窗体的地方Ҏ如下代码Q? bNew=true; this.Close(); //原来H体消失了,但它的类作用域ƈ没有消失 然后在你原来定义、用原H体变量的地方,即frmOld.ShowDialog();之后Q? if(frmOld.bNew) { NewForm frmNew=new NewForm (); frmNew.ShowDialog(); } 问题搞定了。。? </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的都说了Q楼主自׃个个试就可以了啊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">上面的那两个Ҏ已经能解决lz问题了,该结?呵呵 </pre> <img src ="http://www.aygfsteel.com/zqli/aggbug/97404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-02-02 08:53 <a href="http://www.aygfsteel.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://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/02/01/97342.html</guid><wfw:comment>http://www.aygfsteel.com/zqli/comments/97342.html</wfw:comment><comments>http://www.aygfsteel.com/zqli/archive/2007/02/01/97342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zqli/comments/commentRss/97342.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zqli/services/trackbacks/97342.html</trackback:ping><description><![CDATA[记录个自q低错误!!!!!!!!!!!!!!!!!<br /><br />今天在对一个表q行删除Q发C下问题:<br /><br />先附一D代码:Q方便调试,加了些MessageBox.Q?br />            string deleteID = this.costomerDataGrid[this.costomerDataGrid.CurrentRowIndex, 6].ToString();<br />            this.costomer_RecordTableAdapter.Fill(this.realEstatePDADataSet.Costomer_Record);<br />            MessageBox.Show("qo前的dataView集合敎ͼ"+this.dataView2.Count.ToString());<br />            this.dataView2.RowFilter = "客户~号 = '" +deleteID+ "'";<br />            //this.dataView1.Sort = "来访旉";<br />            MessageBox.Show("qo条gQ? + deleteID);<br />            MessageBox.Show("qo后的dataView集合敎ͼ"+this.dataView2.Count.ToString());<br />            this.costomer_RecordBindingSource.EndEdit();<br />            for (int i = 0; i < this.dataView2.Count; i++)<br />            {<br />                MessageBox.Show("删除W?+i+"条记?);<br />                this.costomer_RecordBindingSource.RemoveAt(i);<br />            }<br />            this.costomer_RecordTableAdapter.Update(this.realEstatePDADataSet.Costomer_Record);<br />            MessageBox.Show("删除成功!");<br /><br />出现问题Q表中的记录没被清除完全。仔l检查,发现Data.Count属性随着循环删除Q每ơ比?i < this.dataView2.CountQCount属性也是动态变化的。解军_?<br />            string deleteID = this.costomerDataGrid[this.costomerDataGrid.CurrentRowIndex, 6].ToString();<br />            this.costomer_RecordTableAdapter.Fill(this.realEstatePDADataSet.Costomer_Record);<br />            MessageBox.Show("qo前的dataView集合敎ͼ"+this.dataView2.Count.ToString());<br />            this.dataView2.RowFilter = "客户~号 = '" +deleteID+ "'";<br />            //this.dataView1.Sort = "来访旉";<br />            MessageBox.Show("qo条gQ? + deleteID);<br />            MessageBox.Show("qo后的dataView集合敎ͼ"+this.dataView2.Count.ToString());<br />            this.costomer_RecordBindingSource.EndEdit();<br />            while(this.dataView2.Count!=0)<br />            {<br />                MessageBox.Show("删除W? + Convert.ToSingle(this.dataView2.Count)+ "条记?);<br />                this.costomer_RecordBindingSource.RemoveAt(this.dataView2.Count-1);<br />            }<br />            this.costomer_RecordTableAdapter.Update(this.realEstatePDADataSet.Costomer_Record);<br />                MessageBox.Show("删除成功!");<br /><br /><img src ="http://www.aygfsteel.com/zqli/aggbug/97342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zqli/" target="_blank">放水老?/a> 2007-02-01 20:12 <a href="http://www.aygfsteel.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://www.aygfsteel.com/zqli/archive/2007/02/01/97235.html放水老?/dc:creator>放水老?/author>Thu, 01 Feb 2007 05:48:00 GMThttp://www.aygfsteel.com/zqli/archive/2007/02/01/97235.htmlhttp://www.aygfsteel.com/zqli/comments/97235.htmlhttp://www.aygfsteel.com/zqli/archive/2007/02/01/97235.html#Feedback0http://www.aygfsteel.com/zqli/comments/commentRss/97235.htmlhttp://www.aygfsteel.com/zqli/services/trackbacks/97235.html
public class TestOuter

{

public static void outer(){}

public void outer2(){}



internal class A

{

public voidtest()

{

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

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

}

}

}

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

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();

}

}

}



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

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

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

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

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

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

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

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

如:

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避免outer.new q样的语法,保持一致的对象创徏方式。虽然相比于Java需要创Z个新的方法和变量Q但是对象的创徏q程更加直接Q而且避免了隐含的内部cM外部cȝ实例之间的关pR?

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

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

?

class A1

{

class B1 { }

}

class A2 : A1

{

new class B1 { }

}

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



内部cM用的一些General Information:

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

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

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

public class Demo1 extends JPanel

{

class IconDemo implements Icon {}

}

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

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

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部的部分行ؓq一步抽象,聚簇。常见的一U情冉|在内部类中创建私有的l构Q用于抽象尽在类的内部用的数据l构?



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



创徏内部cȝ一些原则:

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

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

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

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



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


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



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

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

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

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



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

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


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

1.1 普通字W?/h5>

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

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


1.2 单的转义字符

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

表达?/p>

可匹?/p>

\r, \n

代表回R和换行符

\t

制表W?/p>

\\

代表 "\" 本n

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

表达?/p>

可匹?/p>

\^

匚w ^ W号本n

\$

匚w $ W号本n

\.

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

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


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

    正则表达式中的一些表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>

.

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

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


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

    使用Ҏ?[ ] 包含一pd字符Q能够匹配其中Q意一个字W。用 [^ ] 包含一pd字符Q则能够匚w其中字符之外的Q意一个字W。同L道理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>

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


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

    前面章节中讲到的表达式,无论是只能匹配一U字W的表达式,q是可以匚w多种字符其中L一个的表达式,都只能匹配一ơ。如果用表辑ּ再加上修饰匹配次数的ҎW号Q那么不用重复书写表辑ּ可以重复匹配?br />
    使用Ҏ是:"ơ数修饰"攑֜"被修饰的表达?后边。比如:"[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比如:

+

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

*

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

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


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

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

表达?/p>

作用

^

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

$

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

\b

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

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

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

表达?/p>

作用

|

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

( )

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

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


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

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

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

表达?/p>

匚wl果

(d)(\w+)

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

(d)(\w+)(d)

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

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

    非贪婪模式:

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

表达?/p>

匚wl果

(d)(\w+?)

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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


3. 其他通用规则

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

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

形式

字符范围

\xXX

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

\uXXXX

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

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

表达?/p>

可匹?/p>

\S

\D

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

\W

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

\B

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

字符

说明

^

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

$

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

( )

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

[ ]

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

{ }

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

.

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

?

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

+

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

*

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

|

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

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

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

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

表达式属?/p>

说明

Ignorecase

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

Singleline

默认情况下,数?"." 匚w除了换行W(\nQ以外的字符。配|ؓ 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>

 


 

4. 其他提示

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

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

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

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

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

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

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

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

背景

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

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

 

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

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

 

目标

 

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

 

开?/p>

 

l         目标站点l构分析

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

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

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

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

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

 

l         信息提取

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

//获取http面函数

        public string Get_Http(string a_strUrl,int timeout)

        {

            string strResult ;        

 

            try

            {

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

                myReq.Timeout = timeout;

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

           

                Stream myStream = HttpWResp.GetResponseStream () ;

 

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

                StringBuilder strBuilder = new StringBuilder();

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

                {

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

                }

 

                strResult = strBuilder.ToString();

            }

            catch(Exception exp)

            {

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

            }

 

            return strResult ;

 

        }

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

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

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

        {      

            string urlch1 = "";

            string urlch2 = "";                   

            int end_n1 = 0;

            int end_nums = 0;

            int end_nums1 = 0;

            int end_nums2 = 0;

            int end_nums3     = 0;           

            string reUTStr = "";

            string reTitle = "";

            string ret = "";          

            try

            {

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

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

                if( pos01 < 0 )

                {

                    return "";

                }

                if( pos02 < 0 )

                {

                    return "";

                }

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

                if ( pos03 < 0 )

                {

                    urlch1 = urlStr;

                    urlch2 = urlStr;

                }

                else

                {

                    urlch1 = urlStr.Substring( 0,pos03 );

                    urlch2 = urlStr.Substring( 0,pos02 );

                }

 

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

 

                int pos1 = tmpAllStr.IndexOf( blockB );

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

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

                {

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

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

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

                    {

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

                    }

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

                    {

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

                    }

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

                    {

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

                    }

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

                    {

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

                    }

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

                    {

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



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

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

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

[Synchronization()]
public class ConnectionClass
{
 private static OleDbConnection instance = null;
 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";

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



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

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

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




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

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

DataGrid资料

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

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

C#中ؓ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删除认及Item颜色交替
http://dev.csdn.net/develop/article/26/26768.shtm

DataGrid常见解决Ҏ(?--在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前后蟩)《控件版?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降序)
http://dev.csdn.net/develop/article/25/25291.shtm

DataGridq接Access的快速分|Q?Q——SQL语句的选用Q升序)
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的焦点相应键盘事?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间倒数据)
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

如何实现自定义及自动逐页打印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键盘事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键盘事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使用技巧(四)
http://dev.csdn.net/develop/article/15/15282.shtm

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

DataGrid使用技巧(二)
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



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

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

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



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

]]>
վ֩ģ壺 | ̨| ƶ| | | Ϫ| Ͼ| | | Ѯ| | | | غ| ƽ| ͨ| ں| γ| | | | ͨ| ƽ| | ٳ| | | İ| ƽ| | ӱʡ| | | | | ƽ| ׺| | | | |