我想做什么:
我在跑步时创建了一个面板,2个编辑区,一个radiobox。
当我点击RadioButton Edit1
时,我希望Edit1
字段可见,Edit2
字段已显示
单击RadioButton Edit2
后反转。
但它不起作用我可能误解了一些东西。 你有什么想法吗?
procedure CreationPanel(L,T,H,W:integer;Nom,Titre:string
{MyPanel:TPanel});
begin
MyPanel:=TPanel.Create(Form1);
with MyPanel do
begin
Height:=H;
Left:=L;
Width:=W;
Top:=T;
BorderStyle:=bsSingle;
BevelWidth:=3;
BevelOuter:=bvRaised;
Parent:=Form1;
Visible:=True;
TabOrder:=-1;
TabStop:=False;
Tag:=100;
Name:=Nom;
Caption:=Nom;
end;
end;
procedure Creation_Edit(L,T,FontSize:integer;
NomComp,NomPanel:String;
Bool:Boolean
{MyPanel:Tpanel});
begin
MyEdit:=TEdit.Create(MyPanel);
with MyEdit do
begin
Parent:=MyPanel;
{Relation Table Dossier avec Table Bezeichnung}
Height :=21 ;
Left :=L ;
Top :=T ;
Width :=100;
Name:=NomComp;
Font.Name:='MS Sans Serif';
Font.Size:=FontSize;
Visible:=Bool;
end;
end;
procedure Creation_RadioGroup(L,T,H,W,FontSize:integer;
RGName,NomPanel:string
{MyPanelRG:TPanel});
begin
MyRadioGroup:=TRadioGroup.Create(MyPanel);
with MyRadioGroup do
begin
Parent:=MyPanel;
Height :=H ;
Left :=L ;
Top :=T ;
Width :=W;
Font.Name:='MS Sans Serif';
Name:=RGName;
Font.Size:=FontSize;
Items.Add('Edit1);
Items.Add('Edit2');
ItemIndex:=0;
OnClick:=Form1.RadioGroupClick;
end;
end;
procedure TForm1.RadioGroupClick(Sender: TObject);
var
E1,E2:TEdit;
begin {1}
E1:=TEdit(FindComponent('Edit1'));
E2:=TEdit(FindComponent('Edit2'));
E1:=TEdit.Create(MyPanel);
E2:=TEdit.Create(MyPanel);
if E1=nil then showmessage('E1=Nil');
if E2=nil then showmessage('E2=Nil');
If MyRadioGroup.Name='RD1' then {with TEDIT}
begin {If}
If Assigned(E1) and Assigned(E2) then
begin {2}
Case MyRadioGroup.ItemIndex of
0: begin
E1.Visible:=true;
E2.Visible:=False;
end;
1:begin
E1.Visible:=False;
E2.Visible:=true;
end;
end;{Case}
end;{2}
end;{If}
end;{1}
procedure TForm1.FormCreate(Sender: TObject);
begin
{Pannel Left,Top,Hieght,Width}
CreationPanel(80,100,300,180,'Panel1','Panel 1');
Creation_Edit(30,184,10,'Edit1','Panel1',true);
Creation_Edit(30,234,10,'Edit2','Panel1',false);
{RadioGroup Left,Top,Height,Width,FontSize,Tab}
Creation_RadioGroup(30,12,90,120,12,'RD1','Panel1');
end;
end.
答案 0 :(得分:2)
确定您的代码完全混乱,但我可以告诉您底层问题是什么(即导致您提出问题的问题。)
首先,Nasreddine是正确的删除
E1:=TEdit.Create(MyPanel);
E2:=TEdit.Create(MyPanel);
这是一个完全挣扎(尝试任何事情)的尝试,因为E1和E2返回nil。
你不应该试图阻止他们为零。相反,你应该问问自己为什么他们是零。
答案是,Edit1和Edit2不归Form1所有。它们归MyPanel所有。
MyEdit:=TEdit.Create(MyPanel);
所以你的代码应该是
procedure TForm1.RadioGroupClick(Sender: TObject);
var
E1,E2:TEdit;
begin {1}
E1:=TEdit( MyPanel.FindComponent('Edit1'));
E2:=TEdit(MyPanel.FindComponent('Edit2'));
if E1=nil then showmessage('E1=Nil');
if E2=nil then showmessage('E2=Nil');
//etc...
end;{1}