读书人

怎的在Form1中调用Form2里的带参数自定

发布时间: 2013-01-07 10:02:25 作者: rapoo

怎样在Form1中调用Form2里的带参数自定义procedure。
各位高手,我有两个问题,请各位高手帮我看看如何解决。

第一个问题:
我想建立两个Form,在Form1中设置2个按钮(Add和Edit),在Form2中建立两个GroupBox,在这两个GroupBox中分别添加Label和Edit组件。目的是这样:

当单击Form1中的Add按钮时,调用Form2,同时将Form2中GroupBox1中TLabel组件除外的其它所有输入性质的组件的Enabled设为True,将Form2中GroupBox2中TLabel组件除外的其它所有输入性质的组件的Enabled设为False;
当单击Form1中的Edit按钮时,调用Form2,同时将Form2中GroupBox2中TLabel组件除外的其它所有输入性质的组件的Enabled设为True,将Form2中GroupBox1中TLabel组件除外的其它所有输入性质的组件的Enabled设为False。

(即:单击Form1中的Add、Edit按钮后,同时调用Form2,但Form2中的两个GroupBox内的组件的Enabled值相反)

问题:我觉得应该在Form2中编写“自定义事件”,但参数不会写。我写的代码如下所示,但运行后不起作用。

代码如下:

unit Form2;

……

public
{ Public declarations }
procedure SetComponentState(AGroupNum: TGroupBox);

implementation

{$R *.dfm}

uses Form1;

procedure TForm2.SetComponentState(AGroupBoxNum: Integer);
Var
ComTotal: Integer;
begin
IF AGroupBoxNum = 1 Then
begin
For ComTotal := 0 To GroupBox2.ControlCount -1 Do
begin
GroupBox2.Controls[ComTotal].Enabled := False;
end;
end;
IF AGroupBoxNum = 2 Then
begin
For ComTotal := 0 To GroupBox1.ControlCount -1 Do
begin
GroupBox1.Controls[ComTotal].Enabled := False;
end;
end;
end;



unit Unit1;

……

procedure TForm1.Button1Click(Sender: TObject);
begin
Try
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Form2.SetComponentState(1);
Except
Form2.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Try
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
Form2.Free;
Form2.SetComponentState(2);
Except
Form2.Free;
end;
end;



第二个问题:

数据库表中,有“编号、日期、地点、检查人、内容、措施、复查日期、复查人、复查结果”等几个字段。其中“内容”、“措施”两个字段是对应的,有一条内容,就必有一条措施。并且,每次输入都会输入成如下这样:

编号 检查日期 地点 检查人 内容 措施 复查日期 其它字段省略
1 12-7-6 某地 某人 一条内容 一条措施 第二天或第三天
2 同上 同上 同上 与上不同 与上不同 第二天或第三天
3 同上 同上 同上 与上不同 与上不同 第二天或第三天
4 同上 另一地点 同上 一条内容 一条措施 第二天或第三天


5 同上 同上 同上 与上不同 与上不同 第二天或第三天
6 12-7-7 某地 某人 一条内容 一条措施 第二天或第三天
7 同上 同上 同上 与上不同 与上不同 第二天或第三天

以上表中,即:每天会去不同地点检查(最少1个地点,但这种情况几乎没有),每一个地点都会有多条内容,每一条内容都会对应一条措施。(同时,日期不同的时候,即便内容、措施一样,也必须为一条新记录)复查日期为检查日期的第2或第3、4天。

请问各位高手:
2、这样的表怎么做主表和从表?
3、由于“每天会去不同地点检查(最少1个地点,但这种情况几乎没有),每一个地点都会有多条内容,每一条内容都会对应一条措施。”。如果每输入一条就保存一条,太麻烦(每天都会有不少于10条需要输入),怎样设计窗体使输入过程简单?是否能够每次输入都先输入多条记录,然后一起保存?如能,怎样实现?
[解决办法]
Form2.ShowModal;
Form2.Free;
Form2.SetComponentState(1);

都释放了还怎么设置

Form2.SetComponentState(1);
Form2.ShowModal;
Form2.Free;
[解决办法]
函数声明和实际不相符呀
procedure SetComponentState(AGroupNum: TGroupBox);
procedure TForm2.SetComponentState(AGroupBoxNum: Integer);

可以改成这样:
private
procedure SetComponentState;
public
AGroupBoxNum:Integer;

implementation

{$R *.dfm}

procedure TForm2.SetComponentState;
begin
...
end;

procedure TForm2.FormShow(Sender: TObject);
begin
SetComponentState;
end;

其它窗体调用:
try
Application.CreateForm(TForm2, Form2);
Form2.AGroupBoxNum:=0;
Form2.ShowModal;
finally
Form2.Free;
end;

读书人网 >.NET

热点推荐