如何防止在特定位置之前编辑TextBox?

6

如何防止给定位置前的TextBox被编辑?

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

Example Text: The black cat.

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

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

7个回答

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

除了一些复制/粘贴问题外,它运行良好。 - Bob77
@Bob77:复制/粘贴问题是什么? - CJ7
如果你选择所有的文本并将其粘贴回去,那么一个对象包将在其中与未受保护的文本一起被粘贴回来。 - Bob77
如果选择了受保护的文本,我在这里就无法使用 Ctrl+C 复制到剪贴板,这很奇怪。 - wqw

0
只要它是一个预定义的静态文本项,我会采取以下方法:
将文本框的默认值设置为 "The black cat",这样用户就可以立即看到它。
然后使用文本框的 OnGotFocus 事件来删除前14个字符(The black cat),并在末尾添加一个空格。用户随后可以自由地输入他们想要的内容(如果是第二次或更多次编辑,则会保留他们已经输入的任何内容)。
TextBox = Right(TextBox, Len(Textbox) - 14)

然后使用OnLostFocus事件,您可以将14个字符放回文本框的开头。

TextBox = "The black cat " & TextBox.Value

此方法应避免用户在字段任何位置点击鼠标所产生的任何复杂情况,您也不需要使用Change事件来跟踪物理数据。


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

0
以下示例在标记的起始位置之前不接受键盘输入,当在该位置之前的框内单击时,移动到起始位置。
这是两种不希望的操作的不同答案...您可能希望在 _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
你可以使用 TextBox_Changed 事件,然后检查它的 Text 属性。如果它不以 "The" 开头,就把 "The black cat" 放回去。

0

好的,有两种方法。1)在更改事件上测试一下,“the”是否仍然在开头,如果不是,则添加它。2)将“the”放在文本框前面的标签中。甚至可以对其进行格式化,使用户看起来像同一控件。


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)在文本框中被编辑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接