2014-06-13 20 views
7

Używam zamaskowanego pola tekstowego z maską numeru telefonu, a po kliknięciu kontrolki pozycja kursora jest ustawiana w miejscu kliknięcia myszy. Chciałbym zastąpić domyślne ustawienie kursora tak, że:Jak ustawić kursor na końcu tekstu w zamaskowanym polu tekstowym?

  1. Jeśli nie zostanie wprowadzony tekst, kursor jest umieszczony na początku pola tekstowego.

  2. Jeśli tekst jest już wprowadzony i kliknięto kontrolkę, umieść kursor po ostatnim wprowadzonym numerze.

Czy istnieje sposób, aby to zrobić?

EDIT

Niektórzy sugerują, przy użyciu tego kodu:

PhoneNumber.SelectionStart = PhoneNumber.Text.Length; 

Ale to nie będzie działać, ponieważ literały maski są zawarte w sumie długości, które śruby up pozycjonowania kursora. Wiem, że można ustawić właściwość textmaskformat, aby wykluczyć literały, ale liczba nadal nie będzie odpowiednia, ponieważ literały są nadal wyświetlane.

+2

Powinieneś był wspomnieć w swoich pytaniach dotyczących problemów, z jakimi dotychczas się spotkałeś. –

Odpowiedz

0

Jest to dość stary pytanie teraz, ale natknąłem się nim dziś, starając się realizować takie same w moja aplikacja winforms.

Przyjęta odpowiedź zadziałała, ale ustawi kursor na pozycji 0, nawet jeśli na początku jest zamaskowany tekst: XYZ______.

udało mi się rozwiązać ten problem przy użyciu metody FindUnassignedEditPositionFrom() na MaskedTextProvider:

private void TextBox_Click(object sender, EventArgs e) 
{ 
    int startPos = this.textBox.MaskedTextProvider.FindUnassignedEditPositionFrom(this.textBox.MaskedTextProvider.LastAssignedPosition + 1, true); 
    this.textBox.Select(startPos, 0);    
} 

ta wykorzystuje tę samą LastAssignedPosition jako zaakceptowanej odpowiedzi, ale dodatkowo odpowiada za jakiekolwiek nieedytowalnym tekstu, który może pojawić się na początku - krótko mówiąc, spowoduje to przesunięcie kursora do pierwszej dostępnej dostępnej pozycji.

Powiązane problemy