这是我得到错误的代码的一部分:
unit Unit1; interface uses Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,cefvcl,Vcl.ExtCtrls,Vcl.StdCtrls,ceflib,Vcl.ComCtrls,Vcl.ImgList,Vcl.Imaging.pngimage,Vcl.Buttons,JvSpeedButton,Themes,JvExComCtrls,JvComCtrls,JvgPage,Vcl.ToolWin,JvToolBar,Vcl.Menus,Vcl.Mask,JvExMask,JvToolEdit,JvExButtons,JvButtons,rkSmartTabs,rkAeroTabs; type TForm1 = class(TForm) {....} procedure FormCreate(Sender: TObject); procedure addnewtab (Sender: TObject); procedure closetab (Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} {....} procedure TForm1.closetab (Sender: TObject); var smarttabs: TrkAeroTabs; begin smarttabs := Sender as TrkAeroTabs; smarttabs.DeleteTab(smarttabs.ActiveTab); end; procedure TForm1.addnewtab (Sender: TObject); var smarttabs: TrkAeroTabs; begin smarttabs := Sender as TrkAeroTabs; smarttabs.AddTab('New Tab'); end; procedure TForm1.FormCreate(Sender: TObject); begin with TrkAeroTabs.Create(self) do begin OnCloseTab := closetab; //***ERROR HERE*** OnAddClick := addnewtab; Parent := Self; Align := alClient; AddTab('New Tab'); if Classtype = TrkAeroTabs then begin ColorBackground := clBlack; with Self do begin GlassFrame.Top := 25; GlassFrame.Enabled := True; end; end; ShowButton := True; AllowTabDrag := True; end; end;
这是错误:
[DCC Error] Unit1.pas(90): E2009 Incompatible types: 'Parameter lists differ'
addnewtab()工作正常.我不明白为什么closetab()不起作用.谢谢.
解决方法
它不起作用,因为事件是使用与TNotifyEvent不同的类型声明的,并且您的方法参数必须与使用的类型(参数的数量和类型)中声明的内容匹配.
导航到事件声明,您会发现:
TrkAeroTabs = class(TCustomControl) .. published .. property OnCloseTab: TOnTabCloseEvent read FOnCloseTab write FOnCloseTab;
然后,导航到TOnTabCloseEvent声明,您会发现:
TOnTabCloseEvent = procedure(Sender: TObject; Index: Integer; var Close: Boolean) of object;
所以,你必须像这样声明你的方法:
TForm1 = class(TForm) .. procedure closetab (Sender: TObject; Index: Integer; var CanClose: Boolean); procedure TForm1.closetab (Sender: TObject; Index: Integer; var CanClose: Boolean); var smarttabs: TrkAeroTabs; begin smarttabs := Sender as TrkAeroTabs; smarttabs.DeleteTab(smarttabs.ActiveTab); end;
现在,您可以成功将此方法分配给事件.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。