Wykorzystanie selectionStart w textbox

0

Robię program Gui winform, w którym wymyśliłem sobie textbox, do którego dodaje wartości tylko i włącznie przez kliknięcie określonego buttona. Rozwiązałem wiele problemów i zasadniczo wszystko działa mi jak chciałem, z wyjątkiem jednego mankamentu:

  1. Klikam w texbox i dodaje liczbę 1 przez kliknięcie w button.
  2. Do tego celu stosuje insert i startSelection.
  3. Nie rozumiem jednak dlaczego kolejne liczby dodają mi się tylko od lewej i nie rozumiem dlaczego dodają mi się poprawnie tylko wtedy, gdy na zmianę z buttonami za każdym razem ponownie klikam w ten textbox.
  4. Ja bym chciał "wklikać" np. 123 i 4, a po liczbie 4 żeby została zapamiętana ta pozycja i od tej pozycji żeby dodawały się kolejne.
    5.Jednak jeśli nie klikam w textbox, to liczby dodaja mi się cały czas od lewej.
  5. Próbowałem z textlength, ale wtedy było źle, bo z kolei dodawało mi cały czas na końcu - textlength oznacza przecież długość string'a.
  6. Dotarłem teź do textbox.Focus(), ale to też nic nie daje.

Jakieś sugestie?

edit:
Czyli moje pytanie jest: czy da się jakoś zapamiętać wartość selectionStart np. po 123 żeby zapamiętało kliknięcie po cyfrze 3 i żeby dodawało kolejne po cyfrze 3 oraz zapamiętywało kolejną pozycję np. po 1 tylko wtedy, gdy znowu kliknę w textbox i właśnie w pozycję po 1.

W morde, na msdn nic nie znalazłem co by mogło pomóc.

0

Pokaż kod, bo bez niego trudno stwierdzić, co robisz źle.

0

Kod dla każdej cyfry jest taki sam, więc wklejam tylko dla jednej jedynki. Jak klikam cały czas na zmianę z textboxem, to cyfry mam tam, gdzie chcę, ale gdy już nie kliknę w textbox a kliknę w button dodający cyfrę, to dodaje mi zawsze na samym początku.

 var selection=txtbox.selectionStart;
if (radio.checked==true)
{
     if (txtbox.Text="A")
     {
           txtbox.insert(selection,"1");
      }
      else if (txtbox.Text=="" || txtbox.Text!=null)
      {
           txtbox.Insert(selection,"1");
        }
       
}
 
0

No tak, używasz metody Insert, która wstawia tekst na danej pozycji, więc taki to musi dawać efekt. Jeżeli chcesz umieścić nowy znak na końcu napisu, to użyj po prostu konkatenacji.

0
somekind napisał(a):

No tak, używasz metody Insert, która wstawia tekst na danej pozycji, więc taki to musi dawać efekt. Jeżeli chcesz umieścić nowy znak na końcu napisu, to użyj po prostu konkatenacji.

Zgadza się i takie rozwiązanie stosowałem od początku. Jednak zmieniłem na insert, bo moim celem było, by najpierw dodać cyfrę w pozycji, na którą kliknę, a potem,by kolejną cyfre wpisało mi "po bierzącej cyfrze". Natomiast gdy znowu kliknę w inną pozycję np. przy 5 cyfrach drugą, to żeby zaczęło mi kolejne cyfry dodawać właśnie po tej drugiej. To by znacznie "umiliło" korzystanie z tego programu.

Przykładowo:
Wpisuję kolejno: 12345 i teraz klikam między 4,5 i dodaje między nimi (bez ciągłego klikania w textbox) jakieś cyfry 4,1,2,3,5, i znowu klikam np. między 1 a 2 i teraz żeby mi w finalnym efekcie zrobiło o tak: 1,...123... ,2,3,4,...123...,5. - oczywiście bez tych wielokropków;-))

Mam nadzieję, że trochę rozjaśniłem o co mi chodzi. Myślę, że tutaj nie chodzi o proste rozwiązanie.

1

Przenieś selection; jako pole formy, po każdym kliknięciu w textboxie zaktualizuj to.

0
dam1an napisał(a):

Przenieś selection; jako pole formy, po każdym kliknięciu w textboxie zaktualizuj to.

1.Co masz na myśli przez "przenieś 'selection' jako pole formy"?
2.Jak mam 'to' zaktualizować oraz co masz na myśli przez 'to' ?

1
finito napisał(a):

Zgadza się i takie rozwiązanie stosowałem od początku. Jednak zmieniłem na insert, bo moim celem było, by najpierw dodać cyfrę w pozycji, na którą kliknę, a potem,by kolejną cyfre wpisało mi "po bierzącej cyfrze". Natomiast gdy znowu kliknę w inną pozycję np. przy 5 cyfrach drugą, to żeby zaczęło mi kolejne cyfry dodawać właśnie po tej drugiej. To by znacznie "umiliło" korzystanie z tego programu.

Teraz jasne. Metodę Insert wywołujesz ciągle z tym samym parametrem, więc ciągle wstawia w tej samej pozycji. Musisz zwiększać wartość selection po każdym wpisanym znaku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1