【问题标题】:Delphi beginner - using loop with TEditDelphi 初学者 - 在 TEdit 中使用循环
【发布时间】:2015-11-05 17:56:10
【问题描述】:

我有 10 个 TEdits 和 10 个图像,我尝试使用它:

procedure TForm1.Button1Click(Sender: TObject; edit: TEdit);
var i:integer;
begin
for i:= 1 to 10 do
  begin
   if edit[i].text:='1' then picture[i].Show else picture[i].Hide;
  end;
end;

但是delphi返回这个错误:[Error] Unit1.pas(84): Class does not have a default property

我也试过这个:

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:= 1 to 10 do
  begin
   if edit[i].text:='1' then picture[i].Show else picture[i].Hide;
  end;
end;

但是,Delphi 再次返回错误:

[错误] Unit1.pas(84):未声明的标识符:“编辑”。

你能帮我看看这段代码吗?

【问题讨论】:

标签: image delphi loops edit


【解决方案1】:

你需要声明和填充你自己的数组,然后你可以在需要的时候循环它们,例如:

type
  TForm1 = class(TForm)
    Button1: TButton;
    ...
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    // and so on ...
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    // and so on ...
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    ...
  private
    edit: array[1..10] of TEdit;
    picture: array[1..10] of TImage;
    ...
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  edit[1] := Edit1;
  edit[2] := Edit2;
  edit[3] := Edit3;
  // and so on...
  picture[1] := Image1;
  picture[2] := Image2;
  picture[3] := Image3;
  // and so on...

  {
  alternatively:

  for I := 1 to 10 do
  begin
    edit[i] := TEdit(FindComponent('Edit' + IntToStr(i)));
    picture[i] := TImage(FindComponent('Image' + IntToStr(i)));
  end;
  }
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  I: integer;
begin
  for I := 1 to 10 do
  begin
   if edit[i].Text = '1' then
     picture[i].Show
   else
     picture[i].Hide;
   {
   alternatively:
   picture[i].Visible := (edit[i].Text = '1');
   }
  end;
end;

【讨论】:

    【解决方案2】:

    您可以做以下两件事之一:

    1. 使用表单的Components 列表和FindComponent

      procedure TForm1.Button1Click(Sender: TObject);
      var 
        i: Integer;
        TempEdit: TEdit;
      begin
        for i:= 1 to 10 do
        begin
          TempEdit := Self.FindComponent('Edit' + IntToStr[i]) as TEdit;
          if Assigned(TempEdit) then
          begin
            if TempEdit.Text = '1' then
              Picture[i].Show
            else
              Picture[i].Hide;
          end;
        end;
      end;
      
    2. 维护一个单独的TEdit 控件数组,并直接引用它们。分配Picture[i]时,将匹配的TEdit添加到Edits[i],然后

      procedure TForm1.Button1Click(Sender: TObject);
      var 
        i: Integer;
      begin
        for i:= 1 to 10 do
        begin
          if Edits[i].Text = '1' then
              Picture[i].Show
            else
              Picture[i].Hide;
          end;
        end;
      end;
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2012-11-19
      • 2016-01-05
      • 2011-01-28
      相关资源
      最近更新 更多