【发布时间】:2014-01-29 20:30:50
【问题描述】:
我对对象有点陌生,我真的一直坚持这一点,希望你们能帮助我。
我创建了一个简单的应用程序来举例说明我在使用 Delphi 时遇到的问题。
我有一个从 TButton 继承的对象,但是在创建时我可以为这个按钮分配一个“组”,之后我希望能够更改所有创建的按钮的标题并启用和禁用它,具体取决于它所属的组。
表单中有5个按钮:
- 左 G1 - 创建一个按钮以在表单左侧进行分组
- 右 G2 - 在表单右侧创建一个按钮以将两个分组
- 添加标题 - 为独立于组创建的所有按钮添加标题(对所有人都使用相同的标题)
- 启用 G1 - 启用属于第一组的所有按钮
- 禁用 G1 - 禁用属于第一组的所有按钮
我想要做的是能够为每个不同的组创建尽可能多的按钮,然后一次更改所有标题并同时启用和禁用单独的组,这是来自更大应用程序的示例项目创建了很多对象,因此遍历表单中的所有对象将非常消耗,如果可以由对象而不是主表单进行更改,那就太好了。
请伙计们,我不想让任何人为我工作,我希望有人指出我正确的方向,我是否应该使用一个类,即使我知道我无法更改对象的各个属性是有办法吗?我可以以某种方式在对象上实现它,还是需要在调用这些对象的单元上实现它。任何指针?
非常感谢。
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TSample = class(TButton)
private
class var count: integer;
protected
public
procedure increseCount;
constructor Create(AOwner: TComponent; Ypos, Group:Integer); overload;
class procedure rename(name: string);
class procedure enableGroup(Group: Integer; value: Boolean);
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
constructor TSample.Create(AOwner: TComponent; Ypos, Group:Integer);
begin
self.Create(AOwner);
self.Top := count *50;
self.Left := Ypos;
self.Tag := Group;
increseCount;
self.Parent := AOwner as TWinControl;
end;
procedure TSample.increseCount;
begin
count := count + 1;
end;
class procedure TSample.enableGroup(Group: Integer; value: Boolean);
begin
//???
end;
class procedure TSample.rename(name: string);
begin
//self.Caption := name; ???
end;
procedure TForm2.Button1Click(Sender: TObject);
var
left: TSample;
begin
left := TSample.Create(self, 24, 1);
end;
procedure TForm2.Button2Click(Sender: TObject);
var
right: TSample;
begin
right := TSample.Create(self, 200, 2);
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
TSample.rename('Oi!');
end;
procedure TForm2.Button4Click(Sender: TObject);
begin
TSample.enableGroup(1, True);
end;
procedure TForm2.Button5Click(Sender: TObject);
begin
TSample.enableGroup(1, False);
end;
end.
【问题讨论】:
-
你有什么问题?
-
我发布的示例中如何更改标题以及如何启用和禁用属于某个组的按钮。
-
您希望我们为您编写代码吗?你还没有做出任何真正的努力。代码如何找到同一组中的所有控件?
-
不,我不想要代码,我发布了一个代码,我想知道我应该使用什么以及如何使用,因为类方法不是可行的方法,因为它无法更改此属性,如果有人给我一个提示,我可以添加到我已经做过的示例中,然后在此处重新发布结果,为其他人添加新的参考。
-
您想如何找到其他控件?为什么要使用类方法?
标签: class delphi oop object delphi-xe