Lazarus - 为什么这不适用于 ShowModal?

发布于 2024-12-07 18:49:52 字数 369 浏览 0 评论 0原文

我在拉撒路有两种形式。一个是 frmMain,另一个是 frmSub1。两者都有一个文本框。

以下代码有效。即,单击 frmMain 上的按钮时,值

procedure TfrmMain.cmdShowClick(Sender: TObject);
begin
  frmSub1.Show  ;
  frmSub1.txtAns.text := txtMark.Text;
end;

但是当我将 .Show 替换为 .ShowModal 时,它会显示表单,但 frmSub1.txtAns是空白的。

知道为什么会这样吗?

I have two forms in Lazarus. one is frmMain and the other is frmSub1. both have a text box.

The following code works. i.e., on clicking a button on frmMain, the value

procedure TfrmMain.cmdShowClick(Sender: TObject);
begin
  frmSub1.Show  ;
  frmSub1.txtAns.text := txtMark.Text;
end;

But when I replace .Show with .ShowModal, it shows the form but frmSub1.txtAns is blank.

Any idea why this is so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

她说她爱他 2024-12-14 18:49:52

那是因为 ShowModal阻塞调用,即行 frmSub1.txtAns.text := txtMark.Text; 在返回之前不会执行。您必须切换语句的顺序,以下应该按您的预期工作:

procedure TfrmMain.cmdShowClick(Sender: TObject);
begin
  frmSub1.txtAns.text := txtMark.Text;
  frmSub1.ShowModal;
end;

Thats because ShowModal is blocking call, ie the line frmSub1.txtAns.text := txtMark.Text; wont execute until it returns. You have to switch the order of statements, following should work as you expect:

procedure TfrmMain.cmdShowClick(Sender: TObject);
begin
  frmSub1.txtAns.text := txtMark.Text;
  frmSub1.ShowModal;
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文