当前位置 : 主页 > 编程语言 > delphi >

delphi – 创建复合控件是否明智?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有这个应用程序在许多地方重用一种成语.有一个TPanel,上面有一些标签和按钮.目的是允许用户选择日期范围. “ Dates”标题是一个标签,“All Dates”部分是第二个标签.当用户单击“选择
我有这个应用程序在许多地方重用一种成语.有一个TPanel,上面有一些标签和按钮.目的是允许用户选择日期范围.

 

“& Dates”标题是一个标签,“All Dates”部分是第二个标签.当用户单击“选择”按钮时,弹出一个表单,向用户显示一对日期/时间控件和确定/取消按钮.如果用户在选择某些日期后点击确定,则第二个标签将更改为“从mm / dd / yyyy到mm / dd / yyyy”.

创建一个打包这些控件的组件是否合理?我一直在寻找组件编写者的各种资源,他们似乎没有指出我正在考虑的问题,例如处理按钮的onclick事件.如果这是一个合理的尝试,我也很感激指向如何制作这种“复合控制”的描述.

这是合理的,是的.

要创建这样的组件,只需从TCustomPanel派生一个新类,并将子组件添加为类中的字段.

像这样:

TMyDatePicker = class(TCustomPanel)
protected
  FChooseButton: TButton;
  FClearButton: TButton;
public
  constructor Create(Owner: TComponent); override; 
end;

constructor TMyDatePicker.Create(Owner: TComponent)
begin
  // Inherited
  Inherited;

  // Create Choose Button
  FChooseButton := TButton.Create(Self);
  FChooseButton.Parent := Self;
  FChooseButton.Align := alRight;
  FChooseButton.Caption := 'Choose';

  // Create Clear Button
  FClearButton := TButton.Create(Self);
  FClearButton.Parent := Self;
  FClearButton.Align := alRight;
  FClearButton.Caption := 'Clear';
end;

要添加事件处理程序,只需向您的类添加新的受保护程序即可.

例如:

procedure TMyDatePicker.HandleChooseButtonClick(Sender: TObject)
begin
  // Do whatever you want to do when the choose button is clicked
end;

然后将事件处理程序连接到选择按钮的OnClick事件(这应该在类的Create方法中完成):

FChooseButton.OnClick := HandleChooseButtonClick;

当然,还有更多内容,例如微调按钮的对齐和添加图标.此外,您还需要创建自己的事件,例如OnDateSelected或OnDateModified.

但是,除此之外,我认为上面的例子至少应该让你前进.

网友评论