Khi một hành động thậm chí kích hoạt, "người gửi" luôn là hành động. Thông thường đó là cách hữu ích nhất, nhưng bằng cách nào đó nó có thể tìm ra ai đã kích hoạt sự kiện không thể thực hiện của hành động?Làm thế nào tôi có thể thấy ai đã kích hoạt một hành động trong Delphi?
Ví dụ
Hãy nói rằng bạn có một hình thức như sau:
- 2 nút, gọi
Button1
vàButton2
- 1 TAction gọi
actDoStuff
Các hành động tương tự được gán cho cả hai nút. Có thể hiển thị nút nào tôi đã nhấp không?
Example.dfm
object Form1: TForm1
object Button1: TButton
Action = actDoStuff
end
object Button2: TButton
Action = actDoStuff
Left = 100
end
object actDoStuff: TAction
Caption = 'Do Stuff'
OnExecute = actDoStuffExecute
end
end
Example.pas
unit Example;
interface
uses Windows, Classes, Forms, Dialogs, Controls, ActnList, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
actDoStuff: TAction;
procedure actDoStuffExecute(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.actDoStuffExecute(Sender: TObject);
begin
ShowMessage('Button X was clicked');
end;
end.
Giải pháp duy nhất tôi nhìn thấy vào lúc này là không sử dụng bất động sản hoạt động của các nút, nhưng có một eventhandler cho mỗi nút và gọi hàm actDoStuffExecute() từ đó, nhưng loại đó ngăn cản toàn bộ mục đích của việc sử dụng các hành động ngay từ đầu.
Tôi cũng không muốn có hành động riêng cho từng điều khiển riêng biệt. Ví dụ trên là một phiên bản đơn giản của vấn đề mà tôi đang gặp phải. Tôi có một menu với một số lượng các mục menu (tên tập tin), và mỗi mục menu về cơ bản phải làm điều tương tự, ngoại trừ việc tải một tập tin khác. Có hành động cho mỗi mục trình đơn sẽ là một chút ngớ ngẩn.
Hãy xem thông số "Người gửi: TObject" ... Đó là điền trước cho bạn ... Hãy thử xem Người gửi bên trong chức năng của bạn. – Fosco
Vâng, nhưng trong ví dụ trên, 'actDoStuff' sẽ là người gửi. Tôi muốn biết liệu button1 hay button2 đã được nhấn. –