【问题标题】:Cross-form variable with Multiple forms具有多种形式的跨形式变量
【发布时间】: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


【解决方案1】:

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

我可以看到的第二件事是您已将所有单位手动添加到您的使用字段中。这是跟踪正在使用的单位的好习惯,但是对于我假设您正在执行的 PAT 的情况,我建议您转到

文件 -> 使用单位...

并从那里选择你的单位。

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

【讨论】:

  • 欢迎来到 SO! 1. 为什么你认为他来自南非? 2.我们不知道TfrmMusic是放在自动创建表单还是项目选项的可用表单中。 3.由于垃圾邮件发送者,您可能希望从答案中删除您的电子邮件地址。
  • @Sami,你的意思是他问和回答是同一个人?
猜你喜欢
  • 2015-11-27
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多