无法将辅助窗体显示为主窗体

Unable to display secondary Form as a 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);

应该可以解决问题,但事实并非如此。实际上两种形式都显示。我尝试通过转到“项目”>“选项”>“表单”将 MainForm 设置为 Form2,但我得到了相同的结果。

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

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

如果当 Form2 是 MainForm 时 Form1 仍在显示,这是因为您在设计时将 Form1 的 Visible 属性 设置为 true。而是将其设置为 false。然后你可以调用 Form1->Show()Form1->ShowModal() 当你真正准备好显示它时。

当在 IDE 中创建非 MainForm TForm 并将其添加到项目时,它最初设置为 Visible=false