在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
但现在我希望在右键单击文本框时禁用粘贴选项
答案 0 :(得分:2)
如果您想阻止在文本框中使用右键菜单项,您可以创建自己的上下文菜单。
然后,使用API调用,您需要从文本框中取消隐藏默认菜单并连接自定义菜单。 (我不知道其他只允许您在现有上下文菜单中禁用/隐藏项目的API)
缺点是你需要保留的任何菜单项,如复制或删除,你需要自己编写代码。
您可以在Disable right click menu inside a textbox和Weird 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