(sender as TButton).some 和 TButton(sender).some 的区别是什么?

(Sender as TButton) 与 TButton(Sender) 都是 Typecasting,只是语法不同
罢了, 因此, 写成 (Sender as TButton).Caption := ‘Test‘;或者 
TButton(Sender).Caption := ‘Test‘;
结果都一样
针对个别物件个别事件写事件处理程序, 并不需判定 Sender为何, 因为很明
显的 Sender便是这个正在撰写的物件, 但是在多个物件共用一个事件处理程序的情况下,Sender 是谁(谁发生OnClick事件)的判断就有其必要性
if Sender = Button1 的写法是直接判定Sender是不是 Button1这个物件, 但是如果按钮有 64 个, 写 64 个 if叙述恐怕会累死人的...
因此, 以类别的判定取代个别物件的副本(instance)的判定, 应是比较简明的
作法, 於是, 我们可以写成 Sender is TButton, 为真时, 以上述型别转换的方式 --- TButton(Sender).XXXX 撰写, 就可以大辐简化程式,
毕竟,同属 TButton 的物件, 都有相同的属性(属性值不一定相同), 不是吗?
值得注意的是, Sender is (Class Name) 的 Class Name 判断是会牵涉到父阶的继承关系的, 例如: Button1 是Button,Button2是 TBitBtn, 这样的话:Button1 is TButton 为真, Button2 is TButton 也是真, 因为TBitBtn 继承自TButton, 也就是说, 球是球, 篮球也是球. 应用这个观念, 下列的程式:
if ActiveControl is TDBEdit then
(ActiveControl as TDBEdit).CutToClipboard
else
if ActiveControl is TDBMemo then
(ActiveControl as TDBMemo).CutToClipboard;
如果改成:
if ActiveControl is TCustomMemo then
TCustomMemo(ActiveControl).CutToClipboard;
程序的执行效率就更好了, 因为 TDbEdit 与 TDbMemo 的共同父阶是 
TCustomMemo, 而 TCustomMemo
也有 CutToClipboard 方法

有没有试一下我的例子,就知道了。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TA = class
public
procedure Test;
end;

TB = class(TA)
public
procedure Test;
procedure Test1;
procedure Test2;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TA.Test;
begin
Showmessage(‘Call TA.test‘);
end;

procedure TB.Test;
begin
Showmessage(‘Call TB.test‘);
end;

procedure TB.Test1;
begin
(self as TA).test;
end;

procedure TB.Test2;
begin
TA(self).test;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

with TB.Createdo
begin
test1;
free;
end;

{
with TB.Createdo
begin
test2;
free;
end;
}
end;

end.

www:
如果sender 与 TButton 没有关系,编译照样不通过。

原文地址:https://www.cnblogs.com/jijm123/p/9743669.html

时间: 2024-11-20 19:32:19

(sender as TButton).some 和 TButton(sender).some 的区别是什么?的相关文章

checkBox1_CheckedChanged(object sender, EventArgs e)和checkBox1_CheckStateChanged(object sender, EventArgs e)不同

1 using System; 2 using System.Data; 3 using System.Drawing; 4 using System.Text; 5 using System.Windows.Forms; 6 namespace Test18 7 { 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 } 14 private void check

Delphi中的Sender:TObject对象解析

Delphi中的Sender:TObject对象解析 procedure TForm1.Button1Click(Sender: TObject); begin end; 解析:Procedure是过程,TForm是窗体类,加上数字就是某个窗体,像TForm1就是Form1窗体. Button1是你的按钮控件的名称,Button1Click就是按钮的单击事件,(Sender:Tobject)就是发送消息到对象,这里默认为本窗体. Sender的类型是Tobject,是Tobject的派生类. D

Delphi中Sender对象的知识

Sender是一个TObject类型的参数,它告诉Delphi哪个控件接收这个事件并调用相应的处理过程.你可以编写一个单一的事件处理句柄,通过Sender参数和IF…THEN…语句或者CASE语句配合,来处理多个构件.发生事件的构件或控件的值已经赋给了Sender参数,该参数的用途之一就在于:可以使用保留字IS来测试Sender,以便找到调用这个事件处理句柄的构件或控件的类型.例如,将表单中编辑框和标签的Click事件的处理句柄都指向表单的xxx过程,编辑框和标签对Click事件有不同的反应:

WPF事件中的sender就是事件源

可以看到wpf中所有的事件都是这个格式: private void btnTest_Click(object sender, RoutedEventArgs e)  { Button btn = (Button)sender; btn.Content = "i am the soure contrl"; } 其中的sender 指的是事件源,也就是触发该事件的控件

传智播客--WPF基础视频学习--sender解释

sender是激发该事件的对象,如果用在Button的双击点击事件上的话,就是只当前点击的对象 用例子来说明一下,有两个Button控件,分别为1和2,同时绑定一个Button_Click事件 private void Button_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; btn.Content = "你点击我了!!"; } 当点击第一个button1的时候,出现 当点击Button2

.net控件事件中的Sender

private void button2_Click(object sender, RoutedEventArgs e) { } 最近看WPF内容,回顾下.net大家天天都在用,却不是十分关注的一个对象----sender 问:sender到底是什么呢? 答:所有的服务器控件中事件都会有(可能说的太绝对,应该说大多会吧),sender指的是触发事件的控件. private void button2_Click(object sender, RoutedEventArgs e) { Button

object sender, LinkLabelLinkClickedEventArgs e 参数解释

开始是一个LinkLabel 控件,LinkLabel 绑定了Clicke事件 LinkLabel Delete = new LinkLabel(); Delete.Text = "删除"; Delete.Tag="我是第"+i+"行"; //触发详情,删除的超链接事件Delete.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.Devic

SPF和Exchange Sender ID

SPF是什么?在此不再叙述SPF的概念和如何添加,具体可以参考https://postmarkapp.com/blog/explaining-spf.简单的说SPF就是一个防止仿冒邮件的一种技术,当邮件服务器接收到邮件之前,首先要验证发件人的源IP是否是对应域名TXT记录列表中,如果发件人源IP不是TXT记录中的IP,则邮件服务器认为此封邮件就是冒名邮件,接下来就会按照SPF策略处理该邮件. 在此,主要想和大家分享一下SPF和Exchange需要注意的事项. 通过上述描述,我们了解到要让SPF功

C#之winform基础 button1_Click(object sender, EventArgs e)中sender是啥及其用法

1.UI 2.代码 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 na