设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3609|回复: 5
打印 上一主题 下一主题

[Access本身] 原来简单设置就可防止DELETE键误删数据表窗体的字段

[复制链接]
跳转到指定楼层
1#
发表于 2017-8-8 14:24:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wx0000888 于 2017-8-15 10:54 编辑

Private Sub GetControlText(ctl As Control)
    If TypeOf ctl Is TextBox Then                                 ' 判断是否Textbox, 如果Combobox 则不用删除直接下拉框中选择即可
        If InStr(ctl.ControlSource, "=") = 0 Then                 ' 判断数据源是 直接绑定,还是间接绑定
            If ctl.Locked = False And ctl.Enabled = True Then     ' 判断控件是否锁定,和可用
                Dim strText As String
                Dim lngSelStart As Integer
                Dim lngSelLong As Integer
                Dim strNotRpl As String                           ' 截留未被选中的字符, 我们有时会把控件中 其中一部分描黑(选中),两边字符留下
                lngSelStart = ctl.SelStart
                lngSelLong = ctl.SelLength
                strText = Nz(ctl.Text, "")
                strNotRpl = Left(strText, lngSelStart) & Mid(strText, lngSelStart + lngSelLong + 1)
                ctl = strNotRpl
                ctl.SelLength = 0
                ctl.SelStart = lngSelStart
            End If
        End If
    End If
End Sub

Private Sub txtQuantity_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error Resume Next
    If KeyCode = 46 Then
        KeyCode = 0
        '判断该子窗体的容器(子窗体/子报表控件),本人的子窗体/子报表控件名称与子窗体名称相同,      如果不同,如何引用?
        If Me.Parent.Form!(Me.Name).Locked = False And Me.Parent.Form!(Me.Name).Enabled = True Then GetControlText Me.txtQuantity
    End If
End Sub



呵呵, 原来如此简单, 实际上 只要在窗体属性中 <允许布局视图> 上 选择  否



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2017-8-10 09:12:39 | 只看该作者
按钮 禁用也可以。
但要防止其它可删除的途径
3#
 楼主| 发表于 2017-8-10 09:31:20 | 只看该作者
本帖最后由 wx0000888 于 2017-8-10 09:46 编辑

tmtony 版主
昨天 , 我用 自动Autokeys  添加了这个  子宏 {Del}   , 然后 是 RunCode   ,   =DisabledDelete()   , 这个函数里面什么也没有, 只有这么一句  DisabledDelete=True , 确实 防止了DELETE键,  但是 我在子窗体 的输入 中 却也没法用 delete 更改,删除一部分字符了.

顾得了东头,顾不了西头,怎么办?   

我参考过高手们的软件,复制了一份测用于试用, 用DELETE键 删除不了 数据表窗体的 某个列,并没有代码用于delete键,但是他们是如何做到的?
4#
 楼主| 发表于 2017-8-14 23:07:09 | 只看该作者
本帖最后由 wx0000888 于 2017-8-14 23:10 编辑

找到一个比较有效的办法
一般我们不会把数据表窗体单独作为一个窗体,而是作为子窗体的存在, 这样就好办了.
就是:         

乾坤大挪移法---转移焦点法

       当用户不小心单击到数据表子窗体的字段上,那么整列字段就会被选取,如果按DELETE键,在2003以下版本是无所谓的, 但在2007版本以上整个字段就会被删除,那是很危险的事情, 如果用 Autokeys , {DEL} 宏进行屏蔽, 那我们就无法用 delete 键 修改文本控件了, 这样就不方便了,下面的代码就解决了这个问题.   
       就是当鼠标点击选取到整列字段的时候, 我们把焦点转移到主窗体上.  按delete键 只会对主窗体上的控件有影响, 如果焦点开始位置设置好了,就丝毫没有影响了.  

       在子窗体中的代码是如下:   

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   '   不能用Form_MouseUp事件 ,只能是这个
    If IsLoaded("主窗体") Then                                   '  这里的主窗体 是指你们自己的主窗体         
        Me.Parent.cboCustomer.SetFocus                     '   Me.Parent  就是 主窗体
        Me.Parent.cboCustomer.SelStart = Len(Nz(Me.Parent.cboCustomer.Text, ""))   '   cboCustomer 为主窗体上第一个可用的组合控件
    End If
End Sub





5#
 楼主| 发表于 2017-8-15 09:23:02 | 只看该作者
原来还有更简单的办法

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    DoCmd.RunCommand acCmdSelectRecord
    Me.Form.Requery
End Sub
6#
 楼主| 发表于 2017-8-15 10:49:07 | 只看该作者
本帖最后由 wx0000888 于 2017-8-15 10:52 编辑

呵呵, 原来如此简单, 实际上 只要在窗体属性中 <允许布局视图> 上 选择  否

,看来不从基础开始学起,确实是有后遗症啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 03:26 , Processed in 0.082339 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表