Передача переменной в другую форму - PullRequest
3 голосов
/ 18 декабря 2011

Здравствуйте, у меня есть Form1 с некоторыми переменными, и я хочу передать ее в другую Form3, где я буду ее использовать.Итак, у меня два вопроса.

  • Как мне получить доступ к переменной в другой форме?Я предполагаю, что это будет похоже на

    var newIdList:= Form1.idList

  • Когда var idList получит значение в

    procedure TForm1.Button1Click(Sender: TObject);begin idList:=strtoint(edit1.text); end

    иЯ показываю новую форму в другой, могу ли я получить значение в idList?

    procedure TForm1.Button2Click(Sender: TObject); begin form1.hide; form3.show; end


    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;

    type
      TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        Label5: TLabel;
        Edit3: TEdit;
        Edit2: TEdit;
        Button3: TButton;
        Edit4: TEdit;
        Button2: TButton;
        Button1: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        Label3: TLabel;
        Label2: TLabel;
        Edit5: TEdit;
        Label7: TLabel;
        Label6: TLabel;
        Button4: TButton;
        ListBox1: TListBox;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Edit4Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Edit1Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);

      private
        { Private declarations }
      public
        { Public declarations }
        idList,imieList,nazwiskoList,adresList: TStringList;
      end;

    var
      Form1: TForm1;
      plik:TStringList;
      tempPlik:TextFile;
      st:string;
      linia_klient,linia_video:array[0..20] of string;
      id:integer;

    implementation

    uses Unit3;

    {$R *.dfm}

    .
    .
    .

    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
    Edit1.Text:='Witaj, Podaj ID klienta';
    Label1.Caption:='ID Klienta';
    idList:=TStringList.Create;
    imieList:=TStringList.Create;
    nazwiskoList:=TStringList.Create;
    adresList:=TStringList.Create;

    if (FileExists('idList.txt')=true) then idList.LoadFromFile('idList.txt') else idList.SaveToFile('idList.txt');
    if (FileExists('imieList.txt')=true) then imieList.LoadFromFile('imieList.txt') else imieList.SaveToFile('imieList.txt');
    if (FileExists('nazwiskoList.txt')=true) then nazwiskoList.LoadFromFile('nazwiskoList.txt') else nazwiskoList.SaveToFile('nazwiskoList.txt');
    if (FileExists('adresList.txt')=true) then adresList.LoadFromFile('adresList.txt') else adresList.SaveToFile('adresList.txt');

    AssignFile(tempPlik,'video.txt');
    Reset(tempPlik);
    i:=0;
    While Not Eof(tempPlik) do
      begin
        Readln(tempPlik,linia_video[i]);
        inc(i);
      end;

    CloseFile(tempPlik);
    end;



    procedure TForm1.Button4Click(Sender: TObject);
    begin
      //Form1.Hide;
      Form3.Show;
    end;

    end.



unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
Form3.Hide;
//Form1.Show;
end;



procedure TForm3.FormShow(Sender: TObject);
begin

Label4.Caption:= intToStr(idList.Count);
end;

end.

Ответы [ 2 ]

7 голосов
/ 18 декабря 2011

(Я предполагаю, что каждая форма находится в своем собственном блоке.) Во-первых, вы должны убедиться, что idList доступен для других блоков.Например,

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
    idList: integer;
  public
    { Public declarations }
  end;

не подойдет, но

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    idList: integer;
  end;

в порядке.В этом случае все, что вам нужно сделать в Unit2, это добавить Unit1 в его «список использований» (нажмите Alt + F11 или используйте File / «Use Unit ...», находясь в Unit2 или покаредактирование Form2).Затем вы можете использовать Form1.idList для доступа к переменной в любом месте Unit2.(Form1 - это глобальная переменная экземпляра TForm1 в Unit1).

Например,

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;     // <-- Add manually, or press Alt+F11 (or use File/'Use Unit...')

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Form1.idList));
end;

end.
1 голос
/ 18 декабря 2011

'Как я могу получить доступ к переменной в другой форме?' - да, если переменная является публичным или опубликованным членом, и у вас есть доступ к переменной экземпляра, вы можете обращаться к ней так же, как и к любой другой переменной экземпляра класса. Обычно это означает добавление модуля, содержащего класс Form1, к предложению использования модуля, к которому требуется доступ.

'и я показываю новую форму в другой, могу ли я получить значение в idList?' - конечно, пока форма существует, у вас есть доступ к переменной экземпляра формы, а 'idList' является открытым или опубликованным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...