以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何让粘贴操作无效  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=25807)

--  作者:明丰
--  发布时间:2012/11/17 13:51:00
--  如何让粘贴操作无效

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

 

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


--  作者:lin_hailun
--  发布时间:2012/11/17 14:00:00
--  
 设置这一列为禁止直接输入行不?
--  作者:明丰
--  发布时间:2012/11/17 14:15:00
--  

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

 

有2种选择:

 

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

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

 

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


--  作者:lin_hailun
--  发布时间:2012/11/17 14:18:00
--  
 列属性,列表项目有一个禁止直接输入的属性。
--  作者:明丰
--  发布时间:2012/11/17 14:46:00
--  

这个问题能解决吗?

 


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


 

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


--  作者:lin_hailun
--  发布时间:2012/11/17 15:59:00
--  
 没有好的方法,你用第二个方案吧。

把ClipBoard的内容,存起来,楼主先自己弄一下。




--  作者:狐狸爸爸
--  发布时间:2012/11/17 16:01:00
--  

为什么不换个思路?

在Datacolchanging事件中判断输入的值,是否包括在列表项目中,如果不是的,则取消输入?


--  作者:明丰
--  发布时间: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


--  作者:狐狸爸爸
--  发布时间:2012/11/17 16:31:00
--  

呵呵, 你这个判断的代码也太繁琐了,其实可以很简单的。


--  作者:明丰
--  发布时间: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编辑过]