如何防止TextBox
在给定位置之前被编辑?如何防止在某个位置之前编辑TextBox?
例如,如果一个TextBox
包含字符串:
示例文本:黑猫。
如何防止用户在"The"
之前编辑任何内容?
我可以尝试捕获与KeyPress
事件Backspace
关键,但如何使用MouseClick
以防止用户"The"
之前将光标移动到的位置。
如何防止TextBox
在给定位置之前被编辑?如何防止在某个位置之前编辑TextBox?
例如,如果一个TextBox
包含字符串:
示例文本:黑猫。
如何防止用户在"The"
之前编辑任何内容?
我可以尝试捕获与KeyPress
事件Backspace
关键,但如何使用MouseClick
以防止用户"The"
之前将光标移动到的位置。
您可以使用TextBox_Changed
事件,然后检查其Text
属性。如果它不是以“The”开始,那么你放回“The Black Cat”。
好的,2ways。 1)在更改事件上,测试以查看“该”是否仍然在开头,如果不是,则添加它。 2)将“the”放在文本框前面的标签中。你甚至可以格式化它,使它看起来像用户一样的控制。
只要是你已经预先定义的话,我会采取这种方法静态文本项:
有texbox的默认值是“黑猫”,使用户可以立即看到它。
然后使用OnGotFocus事件的文本框删除前14个字符(黑猫)结尾的空格。然后,用户可以自由地输入他们想要的(这将保留什么,他们已经输入,如果编辑第二次或更长时间)有什么用OnLostFocus事件
TextBox = Right(TextBox, Len(Textbox) - 14)
然后你就可以在14个字符放回文本框的开始。
TextBox = "The black cat " & TextBox.Value
此方法应避免用户点击鼠标在该领域的任何地方的任何并发症,你也不需要与变化事件跟踪物理数据。
假设:
TextBox
控制您可以点击这个字符串,选择它,它看起来就像任何在文本框中输入其他文字,唯一的区别是,你不能改变它
的TextBox
名字是txt1
Dim str As String Dim oldStr As String Private Sub Form_Load() str = "The" ' static string that you do not want to be edited oldStr = str + " black cat" ' default string to start with in the text box End Sub Private Sub txt1_Change() If UCase(Left(txt1.Text, Len(str))) <> UCase(str) Then ' the static string was edited, so we restore it to previously 'good' value txt1.Text = oldStr Else ' string was changed, but the change is 'good'. Save the new value oldStr = txt1.Text End If End Sub
该代码将防止在文本框中被编辑的预定义的字符串(str
)。
可以使用单行RichTextBox
和保护这样的
Private Sub Form_Load()
Const STR_PREFIX = "Example Text: "
RichTextBox1.Text = STR_PREFIX & "The black cat."
RichTextBox1.SelStart = 0
RichTextBox1.SelLength = Len(STR_PREFIX)
RichTextBox1.SelProtected = True
RichTextBox1.SelLength = 0
End Sub
下面的例子不接受键盘输入,当你标记的开始位置之前,和前缀时前的方框内单击那个位置,它移动到起始位置
这些都是在不需要的操作2个不同的答案..你可能想使用在_keypress和_Click事件相同的动作
'1 form with
' 1 textbox : name=Text1
Option Explicit
Private mintStart As Integer
Private Sub Form_Load()
Text1.Text = "Example text: The black cat"
mintStart = Len("Example text: ")
End Sub
Private Sub Form_Resize()
Text1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub
Private Sub Text1_Click()
With Text1
If .SelStart < mintStart Then
.SelStart = mintStart
End If
End With 'Text1
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Text1.SelStart < mintStart Then
KeyAscii = 0
End If
End Sub
将您的文本框设置为锁定,然后尝试此操作。
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
Dim TextMin As Integer
TextMin = 3
If Text2.SelStart > TextMin Then
Text2.Locked = False
ElseIf Text2.SelStart <= TextMin Then
Text2.Locked = True
End If
end sub
除了一些复制/粘贴问题以外,效果很好。 – Bob77
@ Bob77:复制/粘贴问题是什么? – CJ7
如果您选择所有文本,将其粘贴回来,则会将对象包与未受保护的文本一起粘贴回来。 – Bob77