vb6中的文本框验证(禁用粘贴选项)

时间:2010-10-01 07:03:42

标签: vb6

在vb 6.0中对文本框进行验证  我试过了

Private Sub Text1_KeyPress(KeyAscii As Integer)    
    If Not (KeyAscii = vbKeyBack Or KeyAscii = vbKeyDelete Or KeyAscii = vbKeySpace Or (KeyAscii >= Asc("1")     And KeyAscii <= Asc("9"))) Then
    KeyAscii = 0
End If

但现在我希望在右键单击文本框时禁用粘贴选项

4 个答案:

答案 0 :(得分:2)

如果您想阻止在文本框中使用右键菜单项,您可以创建自己的上下文菜单。

然后,使用API​​调用,您需要从文本框中取消隐藏默认菜单并连接自定义菜单。 (我不知道其他只允许您在现有上下文菜单中禁用/隐藏项目的API)

缺点是你需要保留的任何菜单项,如复制或删除,你需要自己编写代码。

您可以在Disable right click menu inside a textboxWeird reaction on a popup menu

找到关于如何执行此操作的非常好的解释

接下来要做什么,如果用户使用CTRL + V进行粘贴,该怎么办?或者,如果用户将粘贴映射到不同的键组合(CTRL + V?

除外),该怎么办?

改为验证数据?

您最终可能会编写大量代码来阻止数据输入。为什么不保存该工作,而是让用户输入他们喜欢的内容并使用validate事件来验证数据?

我在另一个网站上使用文本框的验证事件编写了一个示例:Validate Value Is Numeric。该链接还有一个我在帖子中附带的vb6演示项目。

我认为验证的类型是无关紧要的,它只是演示使用validate事件可以让您专注于验证数据,而不是尝试编写每种可能的方法,您可以考虑尝试阻止数据输入到第一名。

在lostfocus之前和下一个控件的getfocus之前触发Validate事件。 仅当验证事件告知取消操作时,才会执行lostfocus事件和任何后续事件。 Validate事件旨在用于确保在执行任何其他事件之前验证控件的值。

答案 1 :(得分:1)

Private Sub Text1_Change()
    If Text1.Tag <> Text1.Text Then
        Text1.Text = Text1.Tag
        Text1.SelStart = Len(Text1.Text)
    End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Text1.Tag = Text1.Text & Chr(KeyAscii)
End Sub

答案 2 :(得分:0)

旧问题,但仍与旧项目有关。

Sam Sylvester提出的解决方案很有趣,但是不允许您删除字符(使用退格键),并在文本框中附加22个ASCII字符(Ctrl + V)(不好)。

我发现此解决方案对我有用(防止使用Ctrl + V以及上下文菜单进行粘贴):

Dim preventPasteFlag As Boolean

Private Sub Text1_Change()
    If preventPasteFlag Then
        Text1.Text = Text1.Tag
        preventPasteFlag = False
    Else
        Text1.Tag = Text1.Text
    End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 22 Then
       preventPasteFlag = True
    End If
End Sub

Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
       preventPasteFlag = True
    End If
End Sub

答案 3 :(得分:-1)

这非常相似:

Private Sub Text1_Change()

Dim i As Long, sTemp As String

    For i = 1 To Len(Text1)
        If InStr(1, "0123456789", Mid$(Text1, i, 1)) > 0 Then sTemp = sTemp & Mid$(Text1, i, 1)
    Next

    Text1 = sTemp
End Sub