无法将辅助窗体显示为主窗体
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
。
所以我在使用 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
。