我的应用程序采用MDI设计,子窗体是一些数据窗体,包含ado data控件和一些绑定到数据源的控件什么的,起初我的ADD,DELETE,UPDATE等按钮是按照VB DATA FORM WIZARD生成的,也就是说放在子窗体上,但我想把她们放到MDI父窗体的工具栏按钮上,这样不必每个子窗体都放按钮,显的累赘。
但现在有一个问题,就是比如EDIT按钮,原先放在子窗体上的功能是当按下EDIT按钮时就进入recordset的编辑状态,此时如果进行了修改,但按下 cancel键则记录恢复到按下EDIT前的状态,就是忽略改动,如果按下update则保存改动后的结果。
当我把这些按钮改为设置到父窗体的工具栏上,代码基本一致,但进入EDIT状态并进行了改动后如果按下CANCEL,程序并没有忽略改动而是记录下了改动后的结果。我猜想这大概是因为我在改动后按下CANCEL时,焦点已经由子窗体转移到了MDI父窗体,内部的某个机制使得程序自动保存下了改动后的结果。MSDN上说只有父窗体才接受ACTIVE和DEACTIVE事件,我试了一下,其间并不发生父窗体的ACTIVE和DEACTIVE事件,不知道这种情况是什么触发了子窗体保存结果,如何避免呢?

解决方案 »

  1.   

    不会吧,没有把按钮放在MDI父窗体的工具条上时,你的 edit 按钮中的代码在各子窗体中能用吗,是不是加了rs.update了?还要注意一点,如果有许多子窗体存在,你在操作按钮时还要针对不同的MDI子窗体中不同的数据库进行操作才行。
      

  2.   

    我是在MDI按钮事件中,对应每个按钮,调用MDI窗体的activeform(活动的子窗体)的一个函数,这个函数的代码是与按钮放在子窗体时一样的,没有八按钮放在MDI父窗体的工具条上时,edit按纽中的代码在各子窗体中是能用的。
    实际上我原来的代码(按钮放在子窗体中时)都是用VB DATA FORM WIZARD生成的,就是project->add form 中的VB DATA FORM WIZARD。