Hiểu tham số người gửi trong trình xử lý sự kiện Delphi

0
22


Trình xử lý sự kiện và người gửi

 procedure TForm1.Button1Click(Sender: TObject) ; begin   ... end;  

Nút1Click

sự kiện OnClick

Tham số “Người gửi” đề cập đến điều khiển được sử dụng để gọi phương thức. Nếu bạn nhấp vào điều khiển Button1, điều này khiến phương thức Button1Click được gọi, thì một tham chiếu hoặc con trỏ tới đối tượng Button1 sẽ được chuyển đến Button1Click trong tham số có tên Người gửi.

Hãy chia sẻ một số mã

Ví dụ: giả sử chúng ta muốn một nút và một mục menu thực hiện cùng một việc. Sẽ thật ngớ ngẩn nếu phải viết cùng một trình xử lý sự kiện hai lần.

Để chia sẻ một trình xử lý sự kiện trong Delphi, hãy làm như sau:

  1. Viết event handler cho đối tượng đầu tiên (ví dụ button trên SpeedBar)
  2. Chọn (các) đối tượng mới – có, có thể chia sẻ nhiều hơn hai đối tượng (ví dụ: MenuItem1)
  3. Chuyển đến trang Sự kiện trong Trình kiểm tra đối tượng.
  4. Nhấp vào mũi tên xuống bên cạnh sự kiện để mở danh sách các trình xử lý sự kiện đã viết trước đó. (Delphi sẽ cung cấp cho bạn danh sách tất cả các trình xử lý sự kiện được hỗ trợ tồn tại trên biểu mẫu)
  5. Chọn sự kiện từ danh sách thả xuống. (ví dụ: Button1Click)

khi nhấp vào

 procedure TForm1.Button1Click(Sender: TObject) ; begin   {code for both a button and a menu item}   ...   {some specific code:}   if Sender = Button1 then    ShowMessage('Button1 clicked!')   else if Sender = MenuItem1 then    ShowMessage('MenuItem1 clicked!')   else    ShowMessage('??? clicked!') ; end;  

Lưu ý: Câu lệnh other thứ hai trong câu lệnh if-then-else xử lý tình huống khi cả Button1 và MenuItem1 đều không gây ra sự kiện. Nhưng ai khác có thể gọi cho bộ điều khiển, bạn có thể hỏi. Hãy thử điều này (bạn sẽ cần một nút thứ hai: Nút2):

 procedure TForm1.Button2Click(Sender: TObject) ; begin    Button1Click(Button2) ;    {this will result in: '??? clicked!'} end;  

LÀ và NHƯ THẾ NÀO

 if Sender is TButton then    DoSomething else    DoSomethingElse;  

hộp chỉnh sửa

 procedure TForm1.Edit1Exit(Sender: TObject) ; begin   Button1Click(Edit1) ; end;  
 {... else} begin   if Sender is TButton then     ShowMessage('Some other button triggered this event!')   else if Sender is TEdit then     with Sender as TEdit do      begin       Text := 'Edit1Exit has happened';       Width := Width * 2;       Height := Height * 2;      end {begin with} end;  

Phần kết luận

Như chúng ta có thể thấy, tham số Người gửi có thể rất hữu ích khi được sử dụng đúng cách. Giả sử chúng ta có nhiều hộp chỉnh sửa và nhãn chia sẻ cùng một trình xử lý sự kiện. Nếu chúng ta muốn tìm ra ai đã kích hoạt sự kiện và thực hiện hành động, chúng ta sẽ phải xử lý các biến đối tượng. Nhưng chúng ta hãy để điều này cho một thời điểm khác.