Foxtable(狐表)用户栏目专家坐堂 → 如何让粘贴操作无效


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

主题:如何让粘贴操作无效

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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
如何让粘贴操作无效  发帖心情 Post By:2012/11/17 13:51:00 [显示全部帖子]

某一列只能输入列表项目内容,但如果原来剪贴板有内容,此时对该列进行粘贴操作,同样能写入其它内容。

 

AllowClipBoard主要是限制复制数据,如果增加一个限制粘贴的函数就好了。


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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
  发帖心情 Post By:2012/11/17 14:15:00 [显示全部帖子]

禁止直接输入就不能选择列表项目了。

 

有2种选择:

 

方案1:进入该列时用“Clear”清除剪贴板内容;

方案2:进入该列时把剪贴板内容复制到其它地方,离开该列时再把内容计入剪贴板。

 

但都觉得不理想,最好是进入该列时不能粘贴数据,保留原来剪贴板内容不变。


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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
  发帖心情 Post By:2012/11/17 14:46:00 [显示全部帖子]

这个问题能解决吗?

 


图片点击可在新窗口打开查看此主题相关图片如下:10.gif
图片点击可在新窗口打开查看


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目7.table


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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
  发帖心情 Post By:2012/11/17 16:24:00 [显示全部帖子]

谢谢。

'DataColChanging '禁止列表以外内容输入
If e.DataCol.Name = "列名"  Then '
    Dim s As String '
    For Each dc As DataCol In DataTables("表A").DataCols
        s = s & "|" & dc.name
    Next
    s = s.trim("|")
    Dim r As new List(of String)
    r.AddRange(s.split("|"))
    Dim lst2 As new List(of String)
    Dim val1 As String  = e.DataTable.GetComboListString("列名","[_Identify] <> " & e.DataRow("_Identify"))
    val1 = val1.Replace("|",",")
    lst2.AddRange(val1.split(","))
    For Each v As String In lst2
        If r.Contains(v) Then
            r.Remove(v)
        End If
    Next
    If r.Contains(e.NewValue) = False And e.NewValue IsNot Nothing Then
        e.Cancel = True
    End If
End If


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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
  发帖心情 Post By:2012/11/17 19:51:00 [显示全部帖子]

'DataColChanging '禁止动态列表以外内容输入
If e.DataCol.Name = "列名"  Then '
    Dim jh As new List(of String)
    jh.AddRange((CurrentTable.Cols("列名").Combolist).split("|"))
    If jh.contains(e.NewValue) = False And e.NewValue IsNot Nothing Then
        e.Cancel = True
    End If
End If

 

还能更简单吗?

[此贴子已经被作者于2012-11-17 20:04:55编辑过]

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


加好友 发短信
等级:二尾狐 帖子:558 积分:4352 威望:0 精华:2 注册:2011/4/18 8:27:00
  发帖心情 Post By:2012/11/18 8:30:00 [显示全部帖子]

禁止指定列粘贴数据,下面代码可以达到要求。

 

'先设置全局var变量"ztb"

 

'BeforeSelChange 进入指定列时,清除剪贴板内容
Dim c As Col = e.Table.Cols(e.NewRange.ColSel)
Select Case c.name
    Case "第六列"
        If ClipBoard.ContainsText Then
            Vars("ztb") = ClipBoard.GetText()
            ClipBoard.Clear()
        End If
End Select

 

'AfterSelChange 离开指定列,内容重新读入剪贴板
Dim c As Col = e.Table.Cols(e.NewRange.ColSel)
Select Case c.name
    Case "第六列"
 Case Else
        If ClipBoard.ContainsText = False And ClipBoard.ContainsImage = False Then
            If Vars("ztb") IsNot Nothing Then
                ClipBoard.SetText(Vars("ztb"))
            End If
        End If
End Select


 回到顶部