2012-12-14 15 views
6

W jaki sposób można uniemożliwić edytowanie TextBox przed daną pozycją?Jak zapobiec edycji TextBox przed określoną pozycją?

Na przykład, jeśli TextBox zawiera łańcuch:

przykład tekst: czarny kota.

Jak mogę uniemożliwić użytkownikowi edytowanie niczego przed "The"?

mogę spróbować pułapkę klawisz Backspace ze zdarzeniem KeyPress, ale w jaki sposób mogę korzystać MouseClick aby uniemożliwić użytkownikowi przesuwając kursor do pozycji przed "The".

Odpowiedz

0

Można użyć zdarzenia TextBox_Changed, a następnie sprawdzić jego właściwość Text. Jeśli nie zaczyna się od "The", odkładasz "Czarny kot".

0

OK, 2ways. 1) W przypadku zmiany, sprawdź, czy "the" jest nadal na początku, a jeśli nie, dodaj go. 2) Umieść "the" w etykiecie przed polem tekstowym. Możesz nawet sformatować go tak, aby wyglądał jak ta sama kontrola dla użytkownika.

0

Dopóki jest to statyczna pozycja tekstu zostały wstępnie zdefiniowane wtedy wziąłbym tego podejścia:

mieć wartość domyślną texbox jako „czarny kot”, dzięki czemu użytkownik może natychmiast zobaczyć.

Następnie użyj zdarzenia OnGotFocus w polu tekstowym, aby usunąć pierwsze 14 znaków (Czarny kot) z spacji na końcu. Użytkownik może wtedy swobodnie wpisać co chcą (to zachować wszystko, co już wpisane jeśli edycja za drugim lub dalszym czasie)

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

Następnie za pomocą zdarzenia OnLostFocus można umieścić 14 znaków z powrotem na początek pola tekstowego.

TextBox = "The black cat " & TextBox.Value 

Ta metoda powinna uniknąć komplikacji z użytkownikiem przyciskiem myszy w dowolnym miejscu w tej dziedzinie, także nie trzeba śledzić dane fizyczne z Zmiany wydarzeń.

0

Założenia:

  • chcesz statyczne „nieedytowalnych” string być w kontroli TextBox

  • można kliknąć na ten napis, zaznacz go i będzie wyglądać tak jak każdy inny tekst w polu tekstowym, jedyną różnicą jest to, że nie będzie w stanie go zmienić

  • nazwa TextBox jest 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 

Ten kod zapobiega predefiniowany ciąg (str) z edytowanych w polu tekstowym.

4

Można użyć pojedynczego wiersza RichTextBox i chronić prefiks jak ten

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

Działa dobrze, z wyjątkiem niektórych problemów związanych z kopią/wklejaniem. – Bob77

+0

@ Bob77: jakie są problemy z kopiowaniem/wklejaniem? – CJ7

+0

Po zaznaczeniu całego tekstu, wklejeniu go, pakiet obiektu zostanie wklejony wraz z niezabezpieczonym tekstem. – Bob77

0

następujący przykład nie akceptuje wprowadzanie danych z klawiatury, kiedy jesteś przed zaznaczonej pozycji startowej, a po kliknięciu w polu przed że stanowisko, porusza się do pozycji startowej

są 2 różne odpowiedzi upon niepożądanych działań .. może chcesz używać tego samego działania w _keypress i _CLICK wydarzeń

'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

Ustaw pole tekstowe na zablokowane, a następnie spróbuj tego.

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 
Powiązane problemy