这只是为了学习:在这个例子Delphi application with login / logout - how to implement?中使用接受的答案,你如何展示一个特定的表格(如果你有很多表格)? 我在LoginForm上放置了一个查询(显示了可以选择和显示的各种表单)。
我应该如何更改现有代码,以便我可以保持相同的功能,这意味着无论我选择哪种形式并单击“打开”它将成为主要形式并显示?
答案 0 :(得分:0)
主窗体是使用Application.CreateForm
创建的第一个窗体。因此,使用if
或case
语句有条件地切换以这种方式创建的表单。
在伪代码中:
if Form1 is main form then
Application.CreateForm(TForm1, Form1)
else if Form2 is main form then
Application.CreateForm(TForm2, Form2)
....
有很多方法可以做到这一点,但这是基本原则。
所以,你可能会创建一个函数来返回主窗体的类,使用你选择它的任何机制:
function GetMainFormClass: TFormClass;
begin
Result :=...; // your logic here
end;
然后在你写的.dpr文件中
Application.CreateForm(GetMainFormClass, MainForm);
你似乎真的在努力解决这个问题。我会尝试更详细地说出来。 GetMainFormClass
的实现可能如下所示:
function GetMainFormClass: TFormClass;
var
FormClassName: string;
begin
FormClassName := ...; // somehow get the name of the form class, e.g. 'TForm1'
if FormClassName = 'TForm1' then
Result := TForm1
else if FormClassName = 'TForm2' then
Result := TForm2
else
raise EUnrecognisedFormClassName.Create(...);
end;
就个人而言,我不明白为什么要向用户呈现网格控件。对我来说,这似乎是一个非常弱的用户界面,用于进行选择。我会提出一个广播组。然后你可以写这样的代码:
type
TMainFormType = (mftForm1, mftForm2, mftForm3);
const
MainFormClass = array [TMainFormType] of TFormClass = (
TForm1,
TForm2,
TForm3
);
然后你可以有一个函数返回TMainFormType
,通过向用户显示一个表单并显示一个带有三个按钮的无线电组。您可以将广播组的ItemIndex
转换为相应的TMainFormType
值。
function GetMainFormType: TMainFormType;
begin
// ... your UI shows now, presenting the radio group
Result := TMainFormType(RadioGroup.ItemIndex);
end;
然后在您编写的.dpr文件中
Application.CreateForm(MainFormClass[GetMainFormType], MainForm);
有很多不同的方法可以做到这一点,但您需要了解分支代码的基础知识。 if
语句或查找表。如果你不明白这些是如何运作的,那么在你继续之前需要充分尊重这些技能。