若不是因为你

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
最近看了一篇文章,是万一老师说关于窗体创建的

http://www.cnblogs.com/del/archive/2010/01/19/1651483.html  感触比较深,因为我经常使用TClipboard 却从来没有注意过这个问题,要反省。

看了文章中的例子,在我的项目也试了一下,成功,呵呵。可惜的是我觉得灵活性比较差,也许是我水平比较差,所以现在说出来,大家探讨一下

文章中的例子:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;

function Form2: TForm2;

implementation

{$R *.dfm}

var
  FForm: TForm2;

function Form2: TForm2;
begin
  if FForm = nil then
    FForm := TForm2.Create(Application);
  Result := FForm;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

end.

这样,我们就可以在别的单元直接使用Form2.ShowModal或者是Form2.Show等属性,但是我们要对于想要控制的窗体呢?比如说,在窗体是有3个Btn,我想根据特定的条件来设置Btn

的Enabled属性?那么也就是说,我们必须要Show或者ShowModal里面写这个控制代码。我常用的方法和万一老师说这个方法的比较。如下:

 

 1 procedure TForm1.BitBtnClick(Sender:TObject);     //我常用的方法
 2 
 3 var
 4 
 5  Form2:TForm2; 
 6 
 7  I:Integer;
 8 
 9 begin
10 
11   I:=0;
12 
13   Form2:=TForm2.Create(Self);
14 
15   if I=0 then    //通过 I 来进行控制
16 
17   begin
18 
19     Form2.BitBtn1.Enabled:=False;  
20 
21   end
22 
23   else
24 
25   begin
26 
27     Form2.BitBtn1.Enabled:=False;
28 
29   end;
30 
31   Form2.ShowModal;
32 
33   Form2.Free;
34 
35 end;
36 
37  
38 
39 procedure TForm1.BitBtnClick(Sender:TObject);
40 
41 var
42 
43   I:Integer;
44 
45 begin
46 
47   I:=0;
48 
49   if I=0 then    //通过 I 来进行控制 
50 
51   begin
52 
53     Form2.BitBtn1.Enabled:=False;   //但是这里就会有错误了,我想你已经看出来了,因为我们的窗体还没有创建
54 
55   end
56 
57   else
58 
59   begin
60 
61     Form2.BitBtn1.Enabled:=False;
62 
63   end;
64 
65   Form2.ShowModal;// 万一老师的方法,窗体是在Form2这个函数中创建的
66 
67 end;
68 
69 

 

通过比较之后,我个人觉得,如果要对新窗体的一些属性和控件进行控件,万一老师的方法就缺少了一些灵活性(当然我想万一老师写的这个文章不是要告诉我们用这个方法去创建窗体),我们虽然可以在新窗体的Show事件中解决一些问题,但是可能会把Show事件写的很复杂。或者利用全局变量在function中进行判断(个人觉得和Show事件中写代码本质都一样)。我还想到一个方法,就是定义多个function。来对应每一个需要如下:

代码
function Form21:TForm2;

function From22:TForm2;

var

 Form:TForm2;

 

function Form21:TForm2;

begin

 
if Form=nil then 

 
begin 

  Form:
=TForm2.Create(Application);

  Form.BitBtn1.Enabled:
=True;

 
end;

 Result:
=Form;

end;

 

function Form22:TForm2;

begin

 
if Form=nil then 

 
begin 

  Form:
=TForm2.Create(Application);

  Form.BitBtn2.Enabled:
=True;

 
end;

 Result:
=Form;

end;

 

Other Unit;

 

procedure TForm1.BitBtnClick(Sender TObject);

var

  I:Integer;

begin

 I:
=0;

 
if I=0 then

 
begin

  Form21.ShowModal;

   
end

 
else

 
begin

  Form22.ShowModal;

 
end;

end;

第一次写技术文章,看起来有点糙,呵呵,希望大家多多指正。(希望万一老师能够进来点评一下)

posted on 2010-02-08 10:44  若不是因为你  阅读(552)  评论(3编辑  收藏  举报