用actionlist共享事件代码的一个问题

ustckikyo 2008-11-29 11:45:54
两个按钮共享事件,如果在共用的onclick事件里面写
if(Sender==Button1)
ShowMessage("Button1click");
if(Sender==Button2)
ShowMessage("Button2click");
是可以区分两个按钮的。
但是我用actionlist在他们的onexcute事件里面那样写却不能实现。
不知道如果用actionlist怎么才能通过sender区分两个按钮
...全文
141 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小笨象 2008-12-06
  • 打赏
  • 举报
回复
还 僵哥 强啊。。
这种用法,我还真不会。。。。
ustckikyo 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 unsigned 的回复:]
C/C++ codevoid __fastcall TForm1::Action1Execute(TObject *Sender)
{
TAction *CurrentAction;
TButton *CurrentButton;

if(!Sender->InheritsFrom(__classid(TAction)))return;
CurrentAction = dynamic_cast<TAction *>(Sender);
if (!CurrentAction->ActionComponent) return;

if(!CurrentAction->ActionComponent->InheritsFrom(__classid(TButton)))return;

CurrentButton = …
[/Quote]
非常感谢,我是新手,不知道怎么给分。呵呵

还想请教一下这些东西在什么书里面会讲,自己摸索这些东西实在太难了。
rxiao99 2008-12-01
  • 打赏
  • 举报
回复
一般控件的事件中,Sender参数是指控制自己
rxiao99 2008-12-01
  • 打赏
  • 举报
回复
正解

[Quote=引用 6 楼 unsigned 的回复:]
C/C++ code
void __fastcall TForm1::Action1Execute(TObject *Sender)
{
TAction *CurrentAction;
TButton *CurrentButton;

if(!Sender->InheritsFrom(__classid(TAction)))return;
CurrentAction = dynamic_cast<TAction *>(Sender);
if (!CurrentAction->ActionComponent) return;

if(!CurrentAction->ActionComponent->InheritsFrom(__classid(TButton)))return;

CurrentButton = dynamic_ca…
[/Quote]
僵哥 2008-12-01
  • 打赏
  • 举报
回复
void __fastcall TForm1::Action1Execute(TObject *Sender)
{
TAction *CurrentAction;
TButton *CurrentButton;

if(!Sender->InheritsFrom(__classid(TAction)))return;
CurrentAction = dynamic_cast<TAction *>(Sender);
if (!CurrentAction->ActionComponent) return;

if(!CurrentAction->ActionComponent->InheritsFrom(__classid(TButton)))return;

CurrentButton = dynamic_cast<TButton *>(CurrentAction->ActionComponent);

ShowMessage(CurrentButton->Name);

}
ustckikyo 2008-11-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zxjrainbow 的回复:]
C/C++ code
TButton *ClickBtn;
ClickBtn= dynamic_cast<TButton *>(Sender);
ShowMessage(ClickBtn->Caption);
[/Quote]
这样还是不行啊
ustckikyo 2008-11-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwp3321 的回复:]
可以采用Button的Tag的属性。
例如把Button1的tag设成1,Button2的tag设成2,则代码如下。
TButton *ClickBtn;
ClickBtn= dynamic_cast <TButton *>(Sender);
if(ClickBtn->Tag == 1)
ShowMessage(ClickBtn->Caption);
else if(ClickBtn->Tag == 2)
ShowMessage(ClickBtn->Caption);
[/Quote]

void __fastcall TForm1::ClickExecute(TObject *Sender)
{
if(Sender->ClassNameIs("TButton"))
{
ShowMessage("ok");
}
TButton *ClickBtn;
ClickBtn= dynamic_cast <TButton *>(Sender);
if(ClickBtn->Tag == 1)
ShowMessage(ClickBtn->Caption);
else if(ClickBtn->Tag == 2)
ShowMessage(ClickBtn->Caption);
}
上面的代码并不显示OK,说明ActionList事件处理中的Sender还是有些讲究的,
所以用ClickBtn访问Tag会出错。不知道怎么才能实现。。。
ustckikyo 2008-11-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wwp3321 的回复:]
可以采用Button的Tag的属性。
例如把Button1的tag设成1,Button2的tag设成2,则代码如下。
TButton *ClickBtn;
ClickBtn= dynamic_cast <TButton *>(Sender);
if(ClickBtn->Tag == 1)
ShowMessage(ClickBtn->Caption);
else if(ClickBtn->Tag == 2)
ShowMessage(ClickBtn->Caption);
[/Quote]

在共用的OnClick事件里面这样写可以用,但是写在actionlist的onexcute事件里面程序运行时会报错。
wwp3321 2008-11-30
  • 打赏
  • 举报
回复
可以采用Button的Tag的属性。
例如把Button1的tag设成1,Button2的tag设成2,则代码如下。
TButton *ClickBtn;
ClickBtn= dynamic_cast<TButton *>(Sender);
if(ClickBtn->Tag == 1)
ShowMessage(ClickBtn->Caption);
else if(ClickBtn->Tag == 2)
ShowMessage(ClickBtn->Caption);




小笨象 2008-11-29
  • 打赏
  • 举报
回复

TButton *ClickBtn;
ClickBtn= dynamic_cast<TButton *>(Sender);
ShowMessage(ClickBtn->Caption);
《Delphi7编程100例》代码目录:---------------------------------------------ToolBar工具栏控件的使用动态建立主菜单选项窗口界面的动态分隔条动态设置选项卡页面在标题栏中自定义按钮窗体开合窗帘效果Windows XP界面效果实现OutLook滚动工具栏效果在下拉列表框中显示树形视图自定义系统的About项修改系统级菜单实现透明窗体效果爆破特技窗体只允许建立一次子窗体的MDI程序从外部DLL中调用子窗口新颖的资源管理器界面如何生成半圆形窗口制作字幕滚动窗体详解Canvas生成渐变色窗口背景WINAPM风格磁化窗口软件封面的图片显示制作实现图片的任意角度旋转奇妙的拼图游戏使用PaintBox控件制作画图程序使用DrawGrid控件制作五子棋多彩的数据报表按压缩比将BMP转换为JPG16位真彩转换到256色调整图片的RGB对比度实现图像的灰度级处理效果3种像素历遍方法的比较和实现实现屏幕拷贝实现图像漫游4种幕布式图像显示技巧盘旋法实现9种滤镜效果图形朦胧叠合显示技巧给MDI主窗体增加背景实现图像的淡入淡出显示多媒体播放器播放AVI文件根据客户端IP地址获取计算机名实现多线程IP和DomainName相互转换Windows2000下的Popup发送功能如何实现Ping操作实现多线程共享探测实现Windows95/98的I/O端口读写收发电子邮件与监视网络服务器资源使用WebBrower制作浏览器可视化的Ping工具使用IdMappedPortTCP进行端口映射动态设置ODBC数据源用ADO控件打开Access数据库DBGrid中的记录到Html页面的转换在DBGrid中实现任意方向查找在DBGrid中通过动态下拉列表查找记录用DBGrid组件制作下拉列表形式的提示框利用书签处理DBGrid中的多个记录将ComboBox中的内容直接拖放到DBGrid里如何在DBGrid里放置图标DBGrid控件精彩组合DBChart图表控件的使用在StringGrid组件中显示查询结果使用流对象(Tstream)实现数据表中Tmemo字段的显示如何动态建立SQLServer ODBCSQL浏览器在SQL查询中使用动态参数事务工作原理标准/模糊查询筛选数据数据字典查看器TDecisionGraph决策组件的使用明细表(Master/Detail)结构像处理文本资料一样处理数据表中的信息远程数据库登录远程数据库的离线处理在远程数据库中实现主从表关系动态设置远程数据库的查询参数在远程数据库中计算统计值多线程与数据库使用远程存储过程数据模块的同步显示建立Web服务的数据提供端建立Web服务的数据访问端开发WebSnap数据库程序建立ActiveForm数据浏览建立数据查询WebServices服务器端数据查询Web服务客户端开发基于WAP的手机无线应用建立基本Web数据库服务器应用建立类型库编辑DataSnap服务端建立查询条件Web数据库服务器应用建立基本MTS服务端建立MTS数据访问客户端建立IntraWeb数据浏览将程序图标设置到Windows系统托盘取得和修改文件的创建和修改日期通过流式数据实现文件分割与合并实现指定扩展名文件和相应程序的关联获取汉字拼音的首字母监视剪贴板在IE工具栏上增加一个按钮图标软件注册机制的建立复活节彩蛋的制作SkinEngine控件——XP换肤ActionList——应用程序通用功能列表OleContainer——OLE容器将程序项设置到控制面板艺术化排列桌面图标Delphi中的ini文件的读写建立键盘鼠标动作记录与回放实现指定目录下的文件查询实现对系统的操作监视系统级热键的实现检测NumLock、Insert、CapsLock、ScrollLock键的状态

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧