CnPack Forum » 技术板块灌水区 » 匿名过程转换成事件过程,增加demo


2011-1-22 16:24 zzzl
匿名过程转换成事件过程,增加demo

之前在[url=http://bbs.cnpack.org/viewthread.php?tid=10193&extra=page%3D1]http://bbs.cnpack.org/viewthread.php?tid=10193&extra=page%3D1[/url]中讲了这个方法,可能用的例子比较偏僻,没有人回复,那么我用一个比较贴近生活的例子吧。

你有一个主窗体TForm1,你需要一个注册用户的功能,那么制作了一个TForm2,供用户填写用户名,密码之类的信息,和一个用于“注册”的按扭。
然后你还需要用户修改资料的功能,于是想重用TForm2,因为窗体布局和控件,和TForm2几乎一样,不同点是,注册按扭下的事件要修改,窗体标题栏的内容改变,某些编辑框不可用(比如用户ID)

这是个很简单的需求,但你可能至少要用到一个全局(或private域下的)变量,并且事件代码呈分散状态。

如果能动态创建事件。。。就可以象这样解决,在TForm1的“注册...”按钮中:

[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Button1[/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]:=[/color][color=#0000ff]'注册'[/color];
[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Button1[/color][color=#000000].[/color][color=#000000]OnClick[/color][color=#000000]:=[/color][color=#000000]notifyevent[/color](  [color=darkgreen]//给Form2的注册按扭“动态”创建一个点击事件[/color]
    [color=#000080][b]procedure[/b][/color](sender[color=#000000]:[/color] [color=#000080][b]TObject[/b][/color])
    [color=#000080][b]begin[/b][/color]
[b][color=#000080][/color][/b]    //...
    [color=#000000]ShowMessage[/color]([color=#0000ff]'注册成功'[/color]);  [color=#006400]//[/color]
    [color=#000080][b]self[/b][/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]:=[/color][color=#0000ff]'欢迎您:'[/color][color=#000000]+[/color][color=#000000]form2[/color][color=#000000].[/color][color=#000000]edit1[/color][color=#000000].[/color][color=#000000]text[/color];  [color=#006400]//在主窗体的标题栏显示新注册的用户名,这里的self,指的是form1,实际上这里可以看到form1所有的内容,你不需要额外的外部变量传递状态。[/color]
    [color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Close[/color];
    [color=#000080][b]end[/b][/color]);
[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]ShowModal[/color];


form1里的“修改...”按钮和上面的类似:

[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Button1[/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]:=[/color][color=#0000ff]'修改'[/color];
[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]:=[/color][color=#000080][b]self[/b][/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]+[/color][color=#0000ff]' --> '[/color][color=#000000]+[/color][color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Caption[/color];
[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Button1[/color][color=#000000].[/color][color=#000000]OnClick[/color][color=#000000]:=[/color][color=#000000]notifyevent[/color]( [color=#006400]//给Form2的修改按扭“动态”创建一个点击事件[/color]
    [color=#000080][b]procedure[/b][/color]([color=#000000]sender[/color][color=#000000]:[/color] [color=#000080][b]TObject[/b][/color])
    [color=#000080][b]begin[/b][/color]
    [color=#000000]ShowMessage[/color]([color=#0000ff]'修改成功'[/color]);
    [color=#000080][b]self[/b][/color][color=#000000].[/color][color=#000000]Caption[/color][color=#000000]:=[/color][color=#0000ff]'欢迎您:'[/color][color=#000000]+[/color][color=#000000]form2[/color][color=#000000].[/color][color=#000000]edit1[/color][color=#000000].[/color][color=#000000]text[/color];
    [color=#000000]Form2[/color][color=#000000].[/color][color=#000000]Close[/color];
    [color=#000080][b]end[/b][/color]);
[color=#000000]Form2[/color][color=#000000].[/color][color=#000000]ShowModal[/color];

完整的代码在附件里。

这个方法使你不必在TForm2中写代码,注册和修改这两个逻辑,分别在TForm1的两个事件代码中实现,在每个事件中,都可以看到form1和form2,很容易控制,你很难搞错。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.