我编了一只工程,这工程(.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
为何会这样呢,哪里错了

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

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