| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 475 人关注过本帖
标题:如何限制用户粘贴进文本框?
只看楼主 加入收藏
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
结帖率:96%
收藏
已结贴  问题点数:20 回复次数:6 
如何限制用户粘贴进文本框?
文本框只可以输入数字,可是我发现鼠标右键可以粘贴进去其他字符,
如何让鼠标右键粘贴不进去其他字符?
搜索更多相关主题的帖子: 文本框 如何 用户 
2014-12-01 18:04
zhengang1026
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:136
专家分:409
注 册:2013-2-6
收藏
得分:0 
文本框本来就接受文本的,你要它不接受字符可能不行。但如果你一定要这样做,可在文本框的Chang事件中写上以下代码:
Private Sub Text1_Change()
On Error Resume Next
If Asc(Text1.Text) < 48 Or Asc(Text1.Text) > 57 Then Text1.Text = ""
End Sub
2014-12-01 19:25
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
不嫌麻烦,用代码控制,很简单的。
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 22 Then KeyAscii = 0   '禁止Ctrl+V键粘贴
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 2 Then MsgBox "禁止粘贴"   '禁止按鼠标左键粘贴
End Sub
2014-12-01 20:09
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
以下是引用xzlxzlxzl在2014-12-1 20:09:15的发言:

不嫌麻烦,用代码控制,很简单的。
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 22 Then KeyAscii = 0   '禁止Ctrl+V键粘贴
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 2 Then MsgBox "禁止粘贴"   '禁止按鼠标左键粘贴
End Sub

不要msgbox怎么弄?不要任何提示
2014-12-01 23:16
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:20 
不要任何提示通用的方法是用钩子,相当繁琐,网上有相关代码。这里介绍一种我刚想到的一种方法,使用延时完成,一般可以欺骗常规用户(鼠标右键按长点时间,仍然会弹出右键菜单,但粘贴选项变灰;了)
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim t As Single
  If Button = 2 Then
    Clipboard.Clear    '清除粘贴板内容,万一弹出也没有什么可以粘贴
    Text1.Enabled = False
    t = Timer * 1000
    While Timer * 1000 - t < 300   '通过实验,0.3秒是一个合适的时间,不容易弹出右键菜单
      DoEvents
    Wend
    Text1.Enabled = True
    Text1.SetFocus
  End If
End Sub

2014-12-02 00:29
txxb
Rank: 2
等 级:论坛游民
帖 子:104
专家分:59
注 册:2014-10-8
收藏
得分:0 
以下是引用xzlxzlxzl在2014-12-2 00:29:59的发言:

不要任何提示通用的方法是用钩子,相当繁琐,网上有相关代码。这里介绍一种我刚想到的一种方法,使用延时完成,一般可以欺骗常规用户(鼠标右键按长点时间,仍然会弹出右键菜单,但粘贴选项变灰;了)
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim t As Single
  If Button = 2 Then
    Clipboard.Clear    '清除粘贴板内容,万一弹出也没有什么可以粘贴
    Text1.Enabled = False
    t = Timer * 1000
    While Timer * 1000 - t < 300   '通过实验,0.3秒是一个合适的时间,不容易弹出右键菜单
      DoEvents
    Wend
    Text1.Enabled = True
    Text1.SetFocus
  End If
End Sub

感谢,我目前用的是清空剪切板
2014-12-02 07:29
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
我的处理方法是,不禁用粘贴,但把粘贴后的数据中的非数字全部给干掉。

Private Sub Text1_Change()

Dim i As Long, o As Long            'i 是循环变量,o 是中间变量
Dim xs As Boolean                   '小数点存在
Dim s1 As String                    '原始数据
Dim s2 As String                    '新数据
Dim l As Long                       '光标位置

l = Text1.SelStart                  '取光标位置
s1 = Text1.Text                     '取原始数据

For i = 1 To Len(s1)                '循环
    o = Asc(Mid(s1, i, 1))          '取一位
    If o = 46 Then                  '小数点
        If xs Then                  '存在
            o = 0                   '取消
        Else
            xs = True               '保存已存在小数点
        End If
    ElseIf o < 48 Or o > 57 Then    '非数字
        o = 0                       '取消
    End If
    If o > 0 Then                   '非取消
    s2 = s2 & Chr(o)                '生成结果
    End If
Next i
If s1 <> s2 Then                    '如果过滤后的数据有变化
    Text1.Text = s2                 '此处会造成再次触发本事件。
    Text1.SelStart = l - 1          '恢复光标位置
End If

End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2014-12-02 11:54
快速回复:如何限制用户粘贴进文本框?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039946 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved