Присвоение значения метке с помощью процедур (Delphi) - PullRequest
1 голос
/ 03 августа 2020

Я пытался присвоить значение метке (вставленной текстовым полем) с помощью процедур. Вот что у меня есть на данный момент:

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.

Есть идеи, почему это не работает?

Если вы действительно знаете, как заставить основную идею работать, присвойте значение метке, вставляемой TextBox во время использования процедур, отлично! Забудьте мой код и позвольте мне взглянуть на ваш :).

В противном случае, если вы знаете или хотя бы имеете подсказку о том, что мне следует изменить в своем коде, даже лучше!

1 Ответ

1 голос
/ 03 августа 2020

Ваш код у меня работает, по крайней мере, как код VCL. Здесь очень много не аксиоматических c вещей, например, вы обычно не должны ссылаться на форму переменную из методов объекта. Что, если вам понадобятся две формы позже? Или что, если эта переменная не установлена?

Идиоматический c способ сделать это будет больше похож на:

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

Вы можете ввести некоторую проверку, чтобы убедиться, что это было число, например

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

А затем Validate может быть примерно таким:

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;

Например.

EDIT: исправление слов.

...