首页 > 解决方案 > 无法将辅助表单显示为 MainForm

问题描述

所以我对 C++ Builder 有这个问题。我有一个包含两个简单表格的项目,仅此而已。

这导致以下生成的代码:


#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("testUnit1.cpp", Form1);
USEFORM("bluewin.cpp", Form2);
//---------------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TForm1), &Form1);
        Application->CreateForm(__classid(TForm2), &Form2);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}

据我所知,第一个创建的表单(Form1)被指定为 MainForm 并在执行时显示。这有效,仅显示 Form1。

现在我想显示第二个表单(Form2),只有这个。我读到颠倒两行:

Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);

获得

Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm1), &Form1);

应该做的伎俩,但它没有。实际上两种形式都会显示。我尝试通过转到 Project > Options > Forms 将 MainForm 设置为 Form2,但我得到了相同的结果。

知道为什么会出现这种行为吗?

标签: c++c++builder

解决方案


MainForm 是第一个在运行时TForm实例化的。Application->CreateForm()在项目选项中设置 MainForm 只会更改CreateForm()代码中调用的顺序。所以交换电话是正确的解决方案。

如果 Form2 是 MainForm 时 Form1 仍然显示,那是因为您Visible在设计时将 Form1 的属性设置为 true。改为将其设置为 false。然后你可以打电话Form1->Show()Form1->ShowModal()在你真正准备好展示它的时候。

当在 IDE 中创建非 MainFormTForm并将其添加到项目中时,它被设置为Visible=false初始。


推荐阅读