CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

关于对DELPHI事件驱动机制疑惑的问题 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

楼主hntjc()2003-02-03 14:19:18 在 Delphi / VCL组件开发及应用 提问

我编了一只工程,这工程(.dpr)文件里有两只FORM,名字分别为FORM1,FORM2  
   
  在FORM2的ONKEYUP里写了根据不同按鍵做不同功能的代码  
   
  FORM1呢USES了FORM2  
   
  我想在FORM1的ONKEYUP时调用FORM2的ONKEYUP事件  
   
  我这样来写了  
   
  form1.onkeyup 代码如下了  
  var  
      tempkey:word;  
   
  begin  
      tempkey:=key;  
      form2.onkeyup(nil,tempkey,[])  
  end;      
   
  上面代码的意思就是把按FORM1的鍵值传到form2里了,并且执行FORM2里相应的程序段  
   
  但根本不执行form2的onkeyup  
   
   
  为何会这样呢,哪里错了  
   
  问题点数:0、回复次数:13Top

1 楼pilicat(Delphi迷)回复于 2003-02-03 14:21:56 得分 0

改为:  
  form2.onkeyup(form1,tempkey,[]);  
  试试看吧.  
  Top

2 楼ehom(?!)回复于 2003-02-03 14:30:09 得分 0

1.方法指针FOnKeyUp没有指向一对象方法,也就是没有给OnKeyUp赋一时间处理方法!  
   
  2.窗体实例Form2还未创建!Top

3 楼sunware()回复于 2003-02-03 15:52:35 得分 0

上面代码的意思就是把按FORM1的鍵值传到form2里了  
   
  大错特错!  
   
  这只不过是把Form1的键值作参数传给Form2的那个处理程序了,而这个处理程序是运作在Form1里的.Form2可从来没接到过这么个按键消息哦!  
  Top

4 楼hntjc()回复于 2003-02-04 13:40:47 得分 0

楼上的大虾了你这句话什么意思啦  
   
  form2的那个处理程序了是在FORM2   的ONKEYUP里,怎么会运做在FORM1里呢  
   
   
  我只不过了是在FORM1里手工调用FORM2的ONKEYUP里  
   
   
  大家讨论讨论了Top

5 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2003-02-04 15:06:17 得分 0

你的form2创建了否?只要建了,sender是nil或者form1倒无所谓;  
  执行时出错了?Top

6 楼xiaoxiao_8(小小_8)回复于 2003-02-04 15:06:24 得分 0

既然是在FORM1   的ONKEYUP时调用FORM2中的一个过程,那不用搞得这么麻烦。  
  在FORM2中写一个过程,如procedure   Form2.form1Keyup(key:word);  
  在Form1.onkeyup中,写一句:   form2.form1keyup(key);  
  就可以了  
   
  Top

7 楼xiaoxiao_8(小小_8)回复于 2003-02-04 15:39:13 得分 0

或者这样也行:  
  form2.keyup(nil,tempkey,[])  
   
  直接写上子程序的名字,不要加ON  
  Top

8 楼cg1120(代码最优化-§惟坚韧者始能遂其志§)回复于 2003-02-04 17:13:31 得分 0

消息所响应的事件是由操作系统控制分发的,你最好采用手动发送相同的消息给FORM2Top

9 楼hntjc()回复于 2003-02-04 18:28:50 得分 0

我的功能代码已经写在了FORM2的ONKEYUP里了  
   
  再按照楼上的大虾写一个过程了,搬来搬去了太麻烦了  
   
   
  我想直接从FORM1里调用FORM2的ONKEYUP事件  
   
  但用  
  FORM2.ONKEYUP(NIL,TEMPKEY,[])运行的时候了执行了出错  
   
  出错的信息好像了什么内存地址无效之类的  
   
  我的窗口了是工程里AUTOCREATE的Top

10 楼ehom(?!)回复于 2003-02-04 19:14:42 得分 0

OnKeyUp指向的不就是一个事件处理过程,直接或间接调用效果是等同的,不存在麻烦不麻烦的问题!  
   
  既然已经确定窗体室例已创建,这样试试!  
   
  if   @Form2.OnKeyUp<>nil   then   Form2.OnKeyUp(nil,tempkey,[]);  
   
  如果不出错了,说明就是我上面说的第一个错误!Top

11 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2003-02-04 19:29:28 得分 0

为什么不用SendMessage?Top

12 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2003-02-05 01:09:08 得分 0

begin  
      tempkey:=key;  
      form2.onkeyup(nil,tempkey,[])  
  end;      
   
  我用了很好,一点没错?Top

13 楼hjb8000(北极熊)回复于 2003-02-05 08:31:43 得分 0

如果FORM2已创建,程序好象没问题,这种用法很常见,你在FORM2内调用试试!!Top

相关问题

  • C#继承机制的疑惑
  • 初学DELPHI的疑惑
  • Delphi 和原生ADO 疑惑!!!
  • 疑惑:Delphi的前途?
  • 刚学驱动开发,问大家一个关于vc疑惑!
  • delphi 拷贝文件的疑惑
  • 关于delphi中对象的疑惑
  • 对消息处理机制的一点疑惑。
  • [疑惑不解]:SQL语言的内部实现机制???
  • 请教一下Java的多线程机制疑惑。

关键词

  • 代码
  • 执行
  • 消息
  • tempkey
  • onkeyup
  • form2
  • 调用
  • 出错
  • nil
  • 事件

得分解答快速导航

  • 帖主:hntjc

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo