![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как из фомы 1 передать занчение параметры в форму 2? [D6, XP]
vegarulez © (2006-04-18 09:05:00)привет мастерам!
Есть 2 формы, и 2 юнита, которые их описывают.
В 1-ом юните описал переменную n в public и в var как стринг...
Внимание вопрос ) : как в юните 2 обратится к переменной n из юнита 1...Где её надо описать, чтоб она доступна была.
Anatoly Podgoretsky (2006-04-18 13:02:00) [1]Ega23 © (18.04.06 11:55) [26]
Нет нужды, есть более кардинальное решение
Ega23 (2006-04-18 11:55:00) [2]2 Anatoly Podgoretsky © (18.04.06 11:54) [25]
[12] и [13] почистить бы...
Anatoly Podgoretsky (2006-04-18 11:54:00) [3]vovnuke © (18.04.06 11:08) [18]
С чего бы. Конструкция свойств для удобства программиста и защиты полей от несанкционированного доступа.
Сергей М. (2006-04-18 11:39:00) [4]
> vovnuke © (18.04.06 11:33) [23]
И для него тоже.
vovnuke (2006-04-18 11:33:00) [5]а для кода вида:
SomeValue := FSomeProp;
SomeValue := SomeProp;
?
Сергей М. (2006-04-18 11:28:00) [6]
> vovnuke © (18.04.06 11:08) [18]
> доступ к полям объекта осуществляентся гораздо быстрее чем
> к к свойствам
Если св-во объявлено как
FSomeField: SomeType; //поле того же объекта
..
property SomeProp: SomeType read FSomeField write FSomeField;
то компилятор генерирует абсолютно идентичный код для обращений вида
Object.FSomeField := SomeValue;
Object.SomeProp := SomeValue;
Ega23 (2006-04-18 11:25:00) [7]
> целиком и полностью согласен, поэтому и написаны уточнения
> в скобках.
Я к тому, что я бы всё равно не стал напрямую к полю обращаться, коль скоро оно в public-секции фигурирует. Пусть чуть дольше, зато потом будет проще, если исправлять придётся.
vovnuke (2006-04-18 11:23:00) [8]целиком и полностью согласен, поэтому и написаны уточнения в скобках.
Ega23 (2006-04-18 11:19:00) [9]В данном конкретном случае - наверное я с тобой соглашусь.
Но. В данном случае тогда и не нужно property, достаточно public-переменную объявить. А обычно пишется
private
FMyProp:TMyType;
function GetFMyProp:TMyType;
procedure SetFMyProp(Value:TMyType);
public
property MyProp : TMyType Read GetFMyProp Write SetFMyProp;
А впроцедуре и функции - уже логика. И этот способ более правильный. Ибо сейчас ты не хочешь никакой логики на запись/чтение поля навешивать - вот ты и обращаешься напрямую к полям. Но завтра тебе эта логика потребуется - и придётся не только декларацию чтения-записи поля менять, а ещё и весь код класса лопатить.
vovnuke (2006-04-18 11:08:00) [10]доступ к полям объекта осуществляентся гораздо быстрее чем к к свойствам, таким образом внутри объекта следут использовать его поля (если это возможно).
Ega23 (2006-04-18 10:50:00) [11]
> правиьней было бы написать так (в данном случае):
> Form2.aString:=FaString;
Докажи.
vovnuke (2006-04-18 10:43:00) [12]Вот это:
> Form2.aString:=aString;
правиьней было бы написать так (в данном случае):
Form2.aString:=FaString;
balepa (2006-04-18 10:35:00) [13]
> Ega23 © (18.04.06 10:29) [14]
Он первый начал.
Не надо нас в РО.
Извините если мое высказывание кого-то это оскорбило. Я был в состоянии аффекта. Больше не буду.
Ega23 (2006-04-18 10:29:00) [14]Моё мнение - обоих умников в РО отправить. Дня на 3. Дабы остыли.
balepa (2006-04-18 10:27:00) [15]Удалено модератором
vegarulez (2006-04-18 10:11:00) [16]Удалено модератором
balepa (2006-04-18 10:07:00) [17]Удалено модератором
Anatoly Podgoretsky (2006-04-18 10:07:00) [18]Не используй одинаковые имена, если не представляешь как это работает.
Ega23 (2006-04-18 10:06:00) [19]Всё не так.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, unit2;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FaString: String;
{ Private declarations }
public
property aString:String Read FaString Write FaString;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
aString:=Edit1.Text;
Application.CreateForm(TForm2, Form2);
try
Form2.aString:=aString;
Form2.ShowModal;
finally
Form2.Free;
Form2:=nil;
end;
end;
end.
//*******************************************************
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm2 = class(TForm)
private
FaString: String;
{ Private declarations }
public
property aString:String Read FaString Write FaString;
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
end.
//*********************************************************
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Anatoly Podgoretsky (2006-04-18 10:06:00) [20]В одном случае работаешь с полем, а в другом случае с переменной.