String 如何防止在特定位置之前编辑文本框?

String 如何防止在特定位置之前编辑文本框?,string,vb6,textbox,keypress,String,Vb6,Textbox,Keypress,如何防止在给定位置之前编辑文本框 例如,如果文本框包含字符串: 示例文本:黑猫 如何防止用户在“”之前编辑任何内容 我可以尝试使用按键事件捕获退格键,但如何使用鼠标单击防止用户将光标移动到“之前的某个位置?您可以使用文本框_Changed事件,然后检查其文本属性。如果它不是以“The”开头,你就放回“The black cat”。好的,两种方式。1) 在change事件中,测试“the”是否仍在开头,如果不是,则添加它。2) 将“the”放在文本框前的标签中。您甚至可以对其进行格式化,使其看起来

如何防止在给定位置之前编辑
文本框

例如,如果
文本框
包含字符串:

示例文本:黑猫

如何防止用户在“”之前编辑任何内容


我可以尝试使用
按键
事件捕获
退格
键,但如何使用
鼠标单击
防止用户将光标移动到“

之前的某个位置?您可以使用
文本框_Changed
事件,然后检查其
文本
属性。如果它不是以“The”开头,你就放回“The black cat”。

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

只要它是您预定义的静态文本项,那么我将采用以下方法:

将texbox的默认值设置为“黑猫”,以便用户可以立即看到它

然后使用文本框的OnGotFocus事件删除前14个字符(黑猫),并在末尾加空格。然后用户可以自由键入他们想要的内容(如果再编辑一次或更长时间,这将保留他们已经键入的内容)

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

TextBox = "The black cat " & TextBox.Value
此方法应避免用户在字段中的任何位置单击鼠标所产生的任何复杂情况,您也不需要使用更改事件跟踪物理数据。

假设:

  • 您希望在
    TextBox
    控件中有一个静态的“不可编辑”字符串

  • 您可以点击这个字符串,选择它,它看起来就像文本框中的任何其他文本一样,唯一的区别是您将无法更改它

  • TextBox
    名称是
    txt1

Dim str作为字符串
作为字符串的Dim oldStr
专用子表单_加载()
str=“您不希望编辑的“”静态字符串
oldStr=str+文本框中以“黑猫”开头的默认字符串
端接头
私有子txt1_变更()
如果UCase(左(txt1.Text,Len(str)))UCase(str),那么
'静态字符串已编辑,因此我们将其恢复为以前的“良好”值
txt1.Text=oldStr
其他的
'字符串已更改,但更改为'good'。保存新值
oldStr=txt1.Text
如果结束
端接头

此代码将阻止在文本框中编辑预定义字符串(
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

以下示例在标记的开始位置之前不接受键盘输入,当在该位置之前的框内单击时,它将移动到开始位置

这是两个不同的答案,针对不必要的行为。。您可能希望在按键和单击事件中使用相同的操作

'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
'1带有
'1 textbox:name=Text1
选项显式
以整数开头的私有文件
专用子表单_加载()
Text1.Text=“示例文本:黑猫”
mintStart=Len(“示例文本:”)
端接头
私有子表单_Resize()
Text1.移动0,0,缩放宽度,缩放高度
端接头
专用子文本1_单击()
用Text1
如果.SelStart
将文本框设置为锁定,然后重试此操作

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
Private Sub Text2\u KeyDown(KeyCode为整数,Shift为整数)
Dim TextMin作为整数
TextMin=3
如果Text2.SelStart>TextMin,则
Text2.Locked=False

ElseIf Text2.SelStart除了一些复制/粘贴问题外工作正常。@Bob77:复制/粘贴问题是什么?如果选择所有文本,将其粘贴回,对象包将与未受保护的文本一起粘贴回其中。如果选择受保护的文本,我无法使用
Ctrl+C
此处将其复制到剪贴板,这很奇怪。
'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