2012-12-14 23 views
6

如何防止TextBox在给定位置之前被编辑?如何防止在某个位置之前编辑TextBox?

例如,如果一个TextBox包含字符串:

示例文本:黑猫。

如何防止用户在"The"之前编辑任何内容?

我可以尝试捕获与KeyPress事件Backspace关键,但如何使用MouseClick以防止用户"The"之前将光标移动到的位置。

回答

0

您可以使用TextBox_Changed事件,然后检查其Text属性。如果它不是以“The”开始,那么你放回“The Black Cat”。

0

好的,2ways。 1)在更改事件上,测试以查看“该”是否仍然在开头,如果不是,则添加它。 2)将“the”放在文本框前面的标签中。你甚至可以格式化它,使它看起来像用户一样的控制。

0

只要是你已经预先定义的话,我会采取这种方法静态文本项:

有texbox的默认值是“黑猫”,使用户可以立即看到它。

然后使用OnGotFocus事件的文本框删除前14个字符(黑猫)结尾的空格。然后,用户可以自由地输入他们想要的(这将保留什么,他们已经输入,如果编辑第二次或更长时间)有什么用OnLostFocus事件

TextBox = Right(TextBox, Len(Textbox) - 14) 

然后你就可以在14个字符放回文本框的开始。

TextBox = "The black cat " & TextBox.Value 

此方法应避免用户点击鼠标在该领域的任何地方的任何并发症,你也不需要与变化事件跟踪物理数据。

0

假设:

  • 你想有一个静态的“不可编辑”字符串是在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)。

4

可以使用单行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 
+0

除了一些复制/粘贴问题以外,效果很好。 – Bob77

+0

@ Bob77:复制/粘贴问题是什么? – CJ7

+0

如果您选择所有文本,将其粘贴回来,则会将对象包与未受保护的文本一起粘贴回来。 – Bob77

0

下面的例子不接受键盘输入,当你标记的开始位置之前,和前缀时前的方框内单击那个位置,它移动到起始位置

这些都是在不需要的操作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 
0

将您的文本框设置为锁定,然后尝试此操作。

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 
相关问题