选择在运行时创建的组件

奥朗吉

我想做的事:

我在运行时创建了一个面板、2 个编辑字段、一个单选框。当我单击 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.     
标准差

好的,您的代码一团糟,但我可以告诉您您的潜在问题是什么(即导致您提出问题的问题。)

首先,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}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Firemonkey组件样式无法在运行时创建

来自分类Dev

在运行时创建的组件中传播 viewModel

来自分类Dev

Firemonkey组件在运行时移动

来自分类Dev

在运行时创建的访问控制

来自分类Dev

DevExpress WebChartControl在运行时创建

来自分类Dev

在运行时快速创建函数

来自分类Dev

在运行时动态创建类

来自分类Dev

在运行时创建Tasklet

来自分类Dev

在运行时创建字段

来自分类Dev

在运行时创建Spock测试

来自分类Dev

在运行时创建Command对象

来自分类Dev

在运行时创建对象?

来自分类Dev

django在运行时创建信号

来自分类Dev

在运行时创建UI元素

来自分类Dev

在运行时创建并填充 ImageList

来自分类Dev

Javascript:在运行时创建函数

来自分类Dev

在运行时创建字典

来自分类Dev

如何在运行时创建的面板中创建组件?

来自分类Dev

如何在运行时为组件选择 Angular 2 服务

来自分类Dev

如何释放在运行时组件中创建的c ++ WinRT类的内存

来自分类Dev

从字符串在运行时创建Delphi Firemonkey组件

来自分类Dev

在运行时更改组件的ID名称

来自分类Dev

是否可以在运行时更改组件样式?

来自分类Dev

在运行时更改组件的ID名称

来自分类Dev

如何在运行时分配组件名称?

来自分类Dev

在运行时更改文本组件值

来自分类Dev

如何在运行时更改 QML 组件的样式?

来自分类Dev

Delphi:在运行时以动态创建的形式创建TComboBox

来自分类Dev

Spring在运行时选择Bean实现