如何防止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