在单元下方我在实现部分声明的变量 - 本地的单元。我也有一个过程,在类型部分中接收一个参数和受让人宣布这样的说法有问题的局部变量。此TFRAME的每个实例被经由passMeTheVar通过一个唯一的变量。

我希望它做的是对帧的每个实例,以保持自己的变量,和别人不同的版本,并用它来定义它如何运作。什么似乎发生,但问题在于,所有实例都使用相同的值,即使我明确地传递每个实例不同的变量。

即:

Unit FlexibleUnit;
interface
uses
//the uses stuff
type
TFlexibleUnit=class(TFrame)
   //declarations including
   procedure makeThisInstanceX(passMeTheVar:integer);
private
//
public
//
end;

implementation
uses //the uses
var myLocalVar;

procedure makeThisInstanceX(passMeTheVar:integer);
begin
myLocalVar:=passMeTheVar;
end;

//other procedures using myLocalVar 
//etc to the 
end;

现在以另一种形式我在什么地方掉了这个框架到设计窗格中,有时是两个在一个形成这些帧,并将它在适当的地方申报等,每个都是独一无二的:

ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;

和当我做了:

ThisFlexibleUnit.makeThisInstanceX(var1); //want to behave in way "var1"
ThatFlexibleUnit.makeThisInstanceX(var2); //want to behave in way "var2"

似乎它们都共享相同的变量“myLocalVar”。

我这样做不对,原则?如果这是正确的方法,那么它的调试我有什么(这是太庞大文章)的问题,但如果这不是正确的原则,然后有没有办法做我的建议?

编辑:

好了,所以在这里学到的教训是,类的定义就是这样。许多类可以去在一个单元,并在Type节所有类的所有实例共享单元的实现部分。

有帮助吗?

解决方案

myLocalVar是一个全局变量,但在单元内才可见。

一个局部变量是在过程/功能,如

procedure makeThisInstanceX(passMeTheVar: integer);
var
  myLocalVar: Integer;
begin
  myLocalVar := passMeTheVar;
end;

如果你想要一个实例变量,即每一帧都有它自己的拷贝,把它放在类:

type
  TFlexibleUnit = class(TFrame)
     procedure makeThisInstanceX(passMeTheVar:integer);
  private
    myLocalVar: Integer;
  ...
  end;

其他提示

您所呼叫的makeThisInstanceX方法作为类(静态)方法,而不是创建的类的一个实例,并调用它作为一个对象的方法。在该参考看一看:

http://oreilly.com/catalog/delphi/chapter/ch02.html

框/单元/类/控制

我举双手赞成你的英勇尝试更好的代码。然而,你的问题和意见来看我很遗憾地通知您,您的理解是非常有限的。

一个帧不是这不是一个类的单元。框架是一类但并不是每个类是一个框架。帧是一个控制但并不是每个控制是一个帧。单位有接口和实现(和初始化和定稿)部分。类有私人和公共(和保护,并出版)的部分。

我没有把中试教,但让你来衡量你的理解水平的最后一段。一个Delphi开发人员应当具备与段落没有问题。我不想让你感觉不好或炫耀 - 只是试图帮助。也许Stack Overflow是不适合你,此时的工具。

如某人刚刚学习的Delphi首次,我可能被某些看似冗余特征混淆。但是,该产品具有悠久的历史,每一次添加它加入的时间是有意义的。它也更容易学习,当你只需要了解它的一块在同一时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top