是的,它應該工作,如果你通過代碼分配事件處理程序。
如果您的事件處理程序不使用ClientData實例中的任何內容(推薦),則甚至不需要創建實例。
類型爲TClientData的nil變量就足夠了。
在下面的示例應用程序中,ClientData模塊不是由dpr自動創建的,而是保持爲零。 這並不妨礙事件處理程序正常工作。
的DPR
program Project2;
uses
Forms,
Unit10 in 'Unit10.pas' {Form10},
Unit11 in 'Unit11.pas' {ClientData: TDataModule};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm10, Form10);
Application.Run;
end.
表單DFM
object Form10: TForm10
Left = 0
Top = 0
Caption = 'Form10'
ClientHeight = 282
ClientWidth = 418
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 168
Top = 168
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
表單PAS
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit11, StdCtrls;
type
TForm10 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form10: TForm10;
implementation
{$R *.dfm}
procedure TForm10.Button1Click(Sender: TObject);
begin
if ClientData = nil then
ShowMessage('ClientData is nil')
else
ShowMessage('ClientData is NOT nil');
end;
procedure TForm10.FormCreate(Sender: TObject);
begin
OnClick := ClientData.WhateverEvent;
end;
end.
DataModule中DFM
object ClientData: TClientData
OldCreateOrder = False
Height = 150
Width = 215
end
DataModule pas
unit Unit11;
interface
uses
SysUtils, Classes, Windows;
type
TClientData = class(TDataModule)
procedure WhateverEvent(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ClientData: TClientData;
implementation
{$R *.dfm}
procedure TClientData.WhateverEvent(Sender: TObject);
begin
MessageBox(0, PChar('Sender is ' + Sender.ClassName), 'Test', MB_ICONINFORMATION or MB_OK);
end;
end.
Se my edit addon。 ClientData是對單例類的全局引用。它應該工作,但仍然拒絕 – 2010-06-02 08:34:18
好吧。您是否嘗試過在運行時分配事件處理程序而不是設計時間?例如在窗體的OnCreate中。 我想知道如果設計時間問題是由於cxGrid的有點'不尋常'的設計。這是一個TcxGridSite和網格視圖等等的所有組合,所以也許OnEnter方法不會像表單所期望的那樣被看到。可能是錯誤的,但... – shunty 2010-06-02 09:10:34
似乎它可能不是與cxGrid的怪異畢竟。在D2010中,您可以使用對象檢查器從其他模塊分配組件引用,但不能在設計時分配它們的方法/事件處理程序 - 僅限運行時。據我所知。 – shunty 2010-06-02 11:00:53