【问题标题】:How to run two forms in C++Builder如何在 C++Builder 中运行两个表单
【发布时间】:2014-11-17 06:51:54
【问题描述】:

很高兴与您分享一些信息。

请问,有人知道如何同时运行两个表格吗?

我的意思是,我执行一个 FOR 单击 FORM1 上的一个 BUTTON 并将 FOR 的值设置为 FORM2 上的一个 LABEL。

这里是FORM1中的一些代码:

void __fastcall Form1::Button1Click(TObject *Sender){
  int i = 0;
  for (i=0;i<=10000;i++){
    Form1->Label1->Caption = i;
    Form2->Label1->Caption = i;  
  }
}

我只想看看这个:

如果....Form1-&gt;Label1-&gt;Caption = 1,Form2-&gt;Label1-&gt;Caption 也必须为 1,依此类推。 FORM2 只显示了最后一个结果,即 10,000。

感谢您的帮助。 谢谢 !

【问题讨论】:

    标签: c++ c++builder tform c++builder-xe3


    【解决方案1】:

    只需拨打Update()(*)

    void __fastcall Form1::Button1Click(TObject *Sender)
    {
      for(int i = 0; i <= 10000; ++i)
      {
        Form1->Label1->Caption = i;
        Form2->Label1->Caption = i;
    
        Form1->Label1->Update();
        Form2->Label1->Update();
      }
    }
    

    Update():

    立即处理任何待处理的绘制消息。

    调用 Update 以强制重新绘制控件,然后再重新绘制,可能很耗时, 处理发生。使用更新向迫不及待的用户提供即时反馈 以便 Windows 绘制消息到达。

    更新不会使控件无效,而只是强制重新绘制具有 已经失效了。

    Application->ProcessMessages() 也可以工作,但这不是正确的选择:它会中断应用程序的执行,以便它可以处理消息队列。 ProcessMessages 可能会慢很多。

    (*) 因为Remy 的提示绝对比原来的答案好(Update vs ProcessMessages)而改变

    【讨论】:

    • 您好,manilio,感谢您的回答。我已经尝试过这个解决方案“ProcessMessages()”,它在第一个表单上完美运行,它不会刷新第二个。
    • 它对我有用。您确定 ProcessMessages() 调用在 for 循环内吗?
    • 是的,你是对的!我的问题是我用 ShowModal() 调用了 Form2,它必须用 Show() 调用。
    • Application-&gt;ProcessMessages() 不是最佳选择。您应该改用Form1-&gt;Label1-&gt;Update()Form2-&gt;Label1-&gt;Update()
    • @RemyLebeau 你说得对。请发表评论作为答案,我会删除我的。
    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多