Ваш код у меня работает, по крайней мере, как код 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: исправление слов.