具有多种形式的跨形式变量

时间:2018-10-14 14:37:31

标签: delphi delphi-2010

我是一名在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(),我在不同形式(Passing the variable to another Form)上使用变量的方法才在这里起作用。 7):在将“ frmSkill_u”添加到第二种形式的用法时,F2047循环单元引用'frmSkill_u'错误。

如何仍然使用这样的变量并同时显示第二种形式?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

我假设你和我一样是南非的高中生。 (使用Delphi和南非荷兰语。) 您在Form.Create上使用了Form.Show而不是frm.Musiek_u;。假设您的表单(frmMusiek_u;)已创建。 iLevel不会分配值,并且会引发错误。

我能看到的第二件事是您已将所有单位手动添加到“使用”字段中。这是跟踪使用的单位的好方法,但是对于我假设您正在使用的PAT,我建议您

  

文件->使用单位...

并从那里选择单位。

如果您的PAT仍然有问题,请随时给我发送电子邮件以获取帮助 Marclevin.sa@gmail.com