1

我一直在尝试使用过程为标签(由文本框插入)分配一个值。这是我到目前为止所拥有的:

type
  TfrmM8E1 = class(TForm)
    Button1: TButton;
    txt1: TEdit;
    lbl1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Labels(a1: Integer);
    procedure DataInput(var a1 : Integer);
  private
  public
  end;

var
  frmM8E1: TfrmM8E1;

implementation

{$R *.dfm}

procedure TfrmM8E1.Button1Click(Sender: TObject);
var
  a: Integer;
begin
  // calls both procedures
  DataInput(a);
  Labels(a);
end;

Procedure TfrmM8E1.DataInput(var a1 : Integer);
begin
  a1 := StrToInt(frmM8E1.txt1.Text);
  // Receives a value from txt1(which is a textbox) and stores it in "a1".
end;

Procedure TfrmM8E1.Labels(a1 : Integer);
begin
  frmM8E1.lbl1.Caption := IntToStr(a1);
  // Assign the value of a1 to the label
end;

end.

程序运行后,它不会在我的标签中显示插入文本框中的值。

知道为什么它不起作用吗?

如果您确实知道如何使主要思想发挥作用,请在整个过程使用过程中为 TextBox 插入的 Label 分配一个值,太好了!忘记我的代码,让我看看你的:)。

否则,如果您知道或至少有提示,我应该在代码中更改什么,那就更好了!

4

1 回答 1

1

你的代码对我有用,至少作为 VCL 代码。这里有很多非公理的东西,比如你通常不应该从对象的方法中引用表单变量。如果你以后想要两个表格怎么办?或者如果没有设置该变量怎么办?

这样做的惯用方式更像是:

procedure TForm1.Button1Click(Sender: TObject);
begin
   Label1.Caption := Edit1.Text;
end;

您可以在其中进行一些验证以确保它是一个数字,例如

Label1.Caption := Validate(Edit1.Text);

然后验证可能是这样的:

function TForm1.Validate(S: String): String;
var I: Integer;
begin
   I := StrToIntDef(S, -1);
   if I = -1 then Result := 'Invalid positive integer.'
   else Result := S;
   end;

举个例子。

编辑:字更正。

于 2020-08-03T00:47:53.280 回答