【发布时间】:2018-10-14 14:37:31
【问题描述】:
我是一名使用 Delphi 2010 的高中生,目前正在从事一个项目。在使用“ShowModal”查看第二个表单时,我在使用在一个表单上分配了值的变量时遇到了一些麻烦。
这是我在第一个表单上的内容(重复时仅显示 1 次单击过程):
unit frmSkill_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, jpeg, dmMusiektukke_u, DBGrids, PAT, frmMusiek_u ;
type
TfrmSkill = class(TForm)
Panel1: TPanel;
pnlBegin: TPanel;
bitbtnMain: TBitBtn;
pnlEasy: TPanel;
pnlInter: TPanel;
pnlAdv: TPanel;
Image1: TImage;
Label1: TLabel;
procedure bitbtnMainClick(Sender: TObject);
procedure pnlBeginClick(Sender: TObject);
procedure pnlEasyClick(Sender: TObject);
procedure pnlInterClick(Sender: TObject);
procedure pnlAdvClick(Sender: TObject);
private
{ Private declarations }
public
iLevel : integer ;
{ Public declarations }
end;
var
frmSkill: TfrmSkill;
implementation
{$R *.dfm}
procedure TfrmSkill.bitbtnMainClick(Sender: TObject);
begin
frmInstru.Visible := True ;
end;
procedure TfrmSkill.pnlBeginClick(Sender: TObject);
begin
iLevel := 0 ;
frmMusic.ShowModal ;
end;
将单击一个按钮来指定人员可以演奏乐器的级别(初学者级别 = 0),然后第二个表单将显示在 Case 语句中使用 iLevel 变量来根据人员的级别过滤数据库选择。
第二种形式:
unit frmMusiek_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, dmMusiektukke_u, Grids, DBGrids, StdCtrls, Buttons, frmSkill_u;
type
TfrmMusic = class(TForm)
dbgMusiekstukke: TDBGrid;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMusic: TfrmMusic;
implementation
{$R *.dfm}
procedure TfrmMusic.FormCreate(Sender: TObject);
begin
case frmSkill.iLevel of
0:
begin
with dmMusiekstukke do
begin
tblMusiekstukke.Filter := 'Difficulty = ''Beginner''' ;
tblMusiekstukke.Filtered := True;
end;
end;
end;
end;
end.
但是,在我弄清楚如何摆脱 [DCC 致命错误] frmSkill_u.pas(7) 之前,我在使用不同形式的变量 (Passing the variable to another Form) 时看到的帖子方法无法在这里工作: F2047 Circular unit reference to 'frmSkill_u' 将“frmSkill_u”添加到第二种形式的使用时出错。
我怎样才能仍然使用这样的变量并同时显示第二种形式?
非常感谢!
【问题讨论】:
-
欢迎来到 SO!为避免单元之间的循环引用,您可以在名为
frmMusiek_u的第二个单元的implementation子句之后添加您的frmSkill_u单元。试试这个! -
不幸的是,这不起作用,因为我认为我弄乱了单位名称的位置。我删除了所有名称并使用 Marc Levin 的建议使用“使用单元”,Delphi 将名称放在所有正确的位置,程序按预期运行。仍然感谢您的评论!
标签: delphi delphi-2010