Foxtable(狐表)用户栏目专家坐堂 → 想仿造系统菜单中的撤消和重做按扭,求助各位大侠


  共有10474人关注过本帖树形打印复制链接

主题:想仿造系统菜单中的撤消和重做按扭,求助各位大侠

帅哥哟,离线,有人找我吗?
独孤九箭
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:50 积分:418 威望:0 精华:0 注册:2012/11/13 14:02:00
想仿造系统菜单中的撤消和重做按扭,求助各位大侠  发帖心情 Post By:2012/11/28 15:16:00 [只看该作者]

正在做一个输入和修改数据库的窗口,发现系统中的撤消和重做按扭很好,想在自己的窗口中实现。我尽量把问题说的清楚一些。

 

1:窗口中设置两个按扭,分别是"编辑_撤消"和"编辑_重做"(Undo和Redo),初始设置为不可用状态。

 

2:窗口中是靠控件对数据库操作的。窗口操作分为三种模式,分别是查看模式,修改模式和新增模式,用单选实现(radiobutten)。

 

3:查看模式下,绑定数据库的控件只能显示,不能修改。撤消和重做当然是不可用状态。

 

4:到修改和新增模式后,想跟据情况把 "编辑_撤消" 和 "编辑_重做" 两个按扭分别激活。激活条件是,当可以撤消编辑时,激活撤消。当可以重做时激活重做。(和系统一样)

 

5:问题一:判断table("表").Undo的值,好象只有直接对数据库进行操作时才有效,通过绑定控件,修改控件时,Undo返回总是False。该如何解决?

 

    问题二:判断绑定控件的值发生了变化的代码应该放在哪里?

    

俺是把代码放在了窗口的全局事件的ValueChanged这里,但发现不对。俺的要求是数据库的内容发生变化时,才判断是否激活,请老师和高手指教!

 

附代码:

 

Dim BJ_CX As WinForm.Button = e.Form.Controls("编辑_撤消")
Dim BJ_CZ As WinForm.Button = e.Form.Controls("编辑_重做")

 

'MessageBox.show("触发","提示 ")
If Tables("客商名录").CanUndo=True Then
   ' MessageBox.Show("可以撤消","提示 ")
    BJ_CX.Enabled=True
Else
   ' MessageBox.Show("不可以撤消","提示 ")
    BJ_CX.Enabled=False
End If
If Tables("客商名录").CanRedo=True Then
   ' MessageBox.Show("可以重做","提示 ")
    BJ_CZ.Enabled=True
Else
   ' MessageBox.show("不可以重做","提示 ")
    BJ_CZ.Enabled=False
End If

 

以上messageBox部分是为了调试时加上去的。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/28 15:33:00 [只看该作者]

 呃,其实我想说,楼主可以写这么多,为什么就不做一个简单的例子上传呢……

 既然是数据库发生改变才激活,那么就应该写在表的DataColChanged事件里。

 回到顶部
帅哥哟,离线,有人找我吗?
独孤九箭
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:50 积分:418 威望:0 精华:0 注册:2012/11/13 14:02:00
  发帖心情 Post By:2012/11/28 15:45:00 [只看该作者]

唉。。。窗口中的控件可以在数据库中定义吗?我刚才试了一下,

Dim BJ_CX As WinForm.Button = e.Form.Controls("编辑_撤消")
Dim BJ_CZ As WinForm.Button = e.Form.Controls("编辑_重做")

 

这两句出错了。

 

我花点时间,做个简单的例上上传吧。


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/11/28 16:06:00 [只看该作者]

那么复杂

三个按钮的属性处于不可用状态.


那个需要解开  就解开呗.

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2012/11/28 16:09:00 [只看该作者]

你可以这个判断:

If DataTables("产品").HasChanges Then
    If MessageBox.Show("产品表已经被修改,是否保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
        DataTables("产品").Save() '保存
    Else
        DataTables("产品").RejectChanges '撤销
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
独孤九箭
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:50 积分:418 威望:0 精华:0 注册:2012/11/13 14:02:00
  发帖心情 Post By:2012/11/28 16:46:00 [只看该作者]

您说的这个判断,我可以试试做为激活按扭的条件。

 

我还是做了个最简单的,传上来。您给看看,怎么搞。拜托啦。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:撤消重做按扭.zip


 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/28 17:21:00 [只看该作者]

 测试了一下,Tables().Undo,Tables().Redo,对于绑定控件修改的值,是无效的。

 判断控件值改变没有什么用处,因为Undo和Redo无效,判断无用。只能是自己记录修改的内容,然后自己实现这个功能了。

 回到顶部
帅哥哟,离线,有人找我吗?
独孤九箭
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:50 积分:418 威望:0 精华:0 注册:2012/11/13 14:02:00
  发帖心情 Post By:2012/11/28 17:25:00 [只看该作者]

知道了,为了这个玩意儿,俺要写上一大段代码了。

 

谢谢lin_hailun。的帮助。


 回到顶部
帅哥哟,离线,有人找我吗?
独孤九箭
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:50 积分:418 威望:0 精华:0 注册:2012/11/13 14:02:00
  发帖心情 Post By:2012/11/28 17:53:00 [只看该作者]

俺想到了一个偷懒的方法,把绑定字段的控件都去掉,直接用记录窗口的控件,这样就是直接对表进行操作了,相信应该CanUndo和CanRedo能判断了,俺先试试,有问题再问你。

 回到顶部
帅哥哟,离线,有人找我吗?
lin_hailun
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/28 17:58:00 [只看该作者]

以下是引用独孤九箭在2012-11-28 17:53:00的发言:
俺想到了一个偷懒的方法,把绑定字段的控件都去掉,直接用记录窗口的控件,这样就是直接对表进行操作了,相信应该CanUndo和CanRedo能判断了,俺先试试,有问题再问你。

我测试了,不行,必须是按键盘才有效。

既可以试一下下面这个偏门的方法……

CurrentTable.Focus
Sendkeys.Send("abc~")

 回到顶部
总数 12 1 2 下一页