2012-12-14 26 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 
相關問題