Перекрестная переменная с несколькими формами - PullRequest
0 голосов
/ 14 октября 2018

Я учусь в старшей школе, работаю с 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;

Будет нажата кнопка, чтобы определить, на каком уровне человек может играть на инструменте.on (Beginner level = 0), а затем вторая форма будет отображаться с использованием переменной iLevel в операторе Case для фильтрации базы данных по тому уровню, который выбрал человек.

Вторая форма:

 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 Fatal Error] frmSkill_u.pas (7): F2047 Ссылка на круговую единицу для 'frmSkill_u' ошибка при добавлении "frmSkill_u" к использованию второй формы.

Как мне все еще использовать такую ​​переменную и одновременно показывать вторую форму?

Большое спасибо!

1 Ответ

0 голосов
/ 14 октября 2018

Полагаю, вы юный африканец, как и я.(Использование Delphi и африкаанс.) Вы использовали Form.Create вместо Form.Show на frm.Musiek_u;.Предполагая, что ваша форма (frmMusiek_u;) уже создана.У iLevel не будет назначенного значения, и он выдаст ошибку.

Второе, что я могу видеть, - это то, что вы вручную добавили все свои юниты в поля ваших применений.Это хорошая практика для отслеживания того, какие юниты используются, но для случая PAT, который, как я предполагаю, вы делаете, я бы рекомендовал перейти к

File -> Use Unit...

и выбор оттуда ваших подразделений.

Если у вас все еще есть проблемы с вашим PAT, не стесняйтесь обращаться ко мне за помощью Marclevin.sa@gmail.com

...