Centrum skryptów - Microsoft Office

Jak automatycznie przełączyć fokus, kiedy użytkownik rozpoczyna wpisywanie danych do aplikacji HTA?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak automatycznie przełączyć fokus, kiedy użytkownik rozpoczyna wpisywanie danych do aplikacji HTA?

Cześć Skrypciarze! Pytanie

Mam aplikację HTA, której używamy do tworzenia i modyfikowania kont użytkowników. Mamy tam kilka pól z numerami telefonów, a każde z nich zawiera trzy pola tekstowe (jedno na numer kierunkowy i dwa na numer telefonu). Chciałbym to tak ustawić, żeby po wpisaniu przez użytkownika trzycyfrowego numeru kierunkowego, kursor automatycznie przeskakiwał do pierwszego pola z numerem telefonu, a po wpisaniu trzech cyfr w to pole, przeskakiwał do ostatniego pola. Jak to zrobić?

-- TJ

Cześć Skrypciarze! Odpowiedź

Cześć, TJ! Trudne pytanie tak z rana, szczególnie w tym jakże ciężkim czasie, jakim jest jesień, która od jakiegoś czasu zamiast kolorami dręczy mnie raczej katarem, siąpieniem i ogólnym wkurzeniem na wszystkich i wszystko. Mam wrażenie, że czas zaczynam odliczać nie liczbą napisanych skryptów, ani czymś tak starodawnym i passe jak zegarek, lecz liczbą wydmuchiwanych chusteczek na minutę. Ostatnio nawet (przepraszam, ze znów nawiązuję do skeczy) oglądałem skecz o interesujących ludziach i jest tam jeden (bardzo interesujący) człowiek, który zaraża koty grypą. Może powinienem się przekwalifikować i zamiast konfundowania kotów, powinienem zawodowo zarażać je grypą. Tfu, zamiast pisania skryptów oczywiście...

Dobrze, biorę nowe opakowanie chusteczek i zaczynam odmierzać czas, ciekawe ile chusteczek zajmie mi napisanie skryptu, który będzie automatycznie zmieniał fokus w aplikacji HTA:

<SCRIPT Language="VBScript">

    Sub Window_Onload

        TextBox1.Focus

    End Sub



    Sub TextBoxCheck

        If Len(TextBox1.Value) = 3 Then

            TextBox2.Focus

            TextBox2.Select

        End If

    End Sub



    Sub TextBoxCheck2

        If Len(TextBox2.Value) = 3 Then

            TextBox3.Focus

            TextBox3.Select

        End If

    End Sub

</SCRIPT>



<body>

    <input type="text" name="TextBox1" size="10" maxLength="3" onKeyUp="TextBoxCheck">-

    <input type="text" name="TextBox2" size="10" maxLength="3" onKeyUp="TextBoxCheck2">-

    <input type="text" name="TextBox3" size="10" maxLength="4">

</body>

(2. chusteczka) Zobaczmy, jak działa nasza magiczna receptura kodowa (muszę napisać chyba kod, który leczy Skrypciarza z grypy). Całkiem możliwe, że nie uszedł Waszej uwadze fakt, iż w naszej aplikacji HTA mamy do czynienia z trzema polami tekstowymi. (Aby nadać jej trochę więcej godności, dodaliśmy jeszcze myślniki, bez których przecież żaden numer telefonu nie może się obejść). Tagowanie w HTML-u dla pierwszego pola tekstowego wygląda w sposób następujący (3. chusteczka):

<input type="text" name="TextBox1" size="10" maxLength="3" onKeyUp="TextBoxCheck">

To nic innego, niż Wasz standardowy tag <INPUT%gt; i jego pięć parametrów:

  • type=”text”. To po prostu standardowy kod HTML, wskazujący że chcemy użyć pola tekstowego, a nie np. przycisku czy pola wyboru.
  • name=”TextBox1”. To nazwa, którą nadaliśmy naszemu polu tekstowemu, każde pole tekstowe ma bowiem swoją własną, niepowtarzalną nazwę, więc zawsze możemy się do niego odnieść. (Na jakże niepowtarzalną i niespotykaną nazwę „TextBox1” wpadliśmy sami, nikt nam nie pomagał.)
  • size=”10”. Właściwość rozmiar określa szerokość pola w znakach. Wybraliśmy 10 ponieważ… w sumie to nie wiadomo dlaczego.
  • maxLength=”3”. To bardzo użyteczna właściwość, określa nam maksymalną liczbę znaków, jaka może zostać wpisana w pole. Ponieważ kierunkowy w Stanach (zakładam, że TJ jest właśnie ze Stanów) nigdy nie składa się z więcej niż trzech cyfr, ustawiamy tę właściwość właśnie na 3. Oznacza to, że po wpisaniu trzech cyfr można sobie klikać i klikać w nieskończoność, ale i tak z czwartego (4. chusteczka) czy piątego znaku nic nie będzie…
  • onKeyUp=”TextBoxCheck”. Zdarzenie onKeyUp jest uruchamiane za każdym razem, kiedy fokus znajdzie się w polu tekstowym, a użytkownik naciśnie i zwolni klawisz na klawiaturze. W momencie zwolnienia klawisza uruchamiane jest zdarzenie onKeyUp, a nasza HTA od razu uruchamia podprogram TextBoxCheck (co omówimy za moment).

Potem, dla dwóch pozostałych pól tekstowych, mamy już tagowanie podobne do HTML owego. (5. chusteczka)

Oprócz naszych trzech pól tekstowych, HTA ma także trzy podprogramy. Pierwszy podprogram, Window_OnLoad, jest wywoływany automatycznie za każdym razem, gdy HTA jest załadowywana lub odświeżana. Ten podprogram ma tylko jedno zadanie – umieszcza fokus (kursor) w polu tekstowym o jakże zaskakującej nazwie TextBox1. Po co nam to? Potrzebne – za każdym razem, gdy uruchamiamy aplikację, fokus będzie automatycznie w pierwszym polu tekstowym. Oznacza to, że po uruchomieniu HTA możemy od razu przystąpić do wpisywania numeru kierunkowego.

Oczywiście nie trzeba tego robić koniecznie, ale my, Skrypciarze, lubimy dbać o każdy szczegół, który mógłby uprzyjemnić jakże żmudną pracę z aplikacją HTA, jaką jest wpisywanie numeru telefonu (6. chusteczka).

Dwa kolejne podprogramy (TextBoxCheck and TextBoxCheck2, na te nazwy także wpadliśmy sami) są sercem, duszą, centrum, sensem, sednem naszej aplikacji HTA. Spójrzmy na podprogram TextBoxCheck który to, jak sobie przypominacie, uruchamia się za każdym razem, gdy użytkownik próbuje wpisać coś w pole (oprócz numeru kierunkowego oczywiście):

Sub TextBoxCheck

    If Len(TextBox1.Value) = 3 Then

        TextBox2.Focus

        TextBox2.Select

    End If

End Sub

Za każdym razem, gdy ktoś wpisze coś w pole tekstowe, używamy funkcji VBScript Len, żeby zobaczyć ile znaków ogółem zostało wpisane w dane pole (to jest, ile znaków jest w wartości -Value- naszego pola tekstowego) Przypuśćmy, że jego długość (liczba znaków) ma być równa 3. Co się okazuje? Okazuje się oczywiście, ze maksymalna liczba znaków, jaką możemy wpisać, to właśnie 3. Dwie rzeczy jeszcze, zanim pójdę po kolejne opakowanie chusteczek:

  • Najpierw przenosimy fokus z TextBoxt1 do pola TextBox2. Do tego służy kod TextBox2.Focus
  • Następnie wybieramy jakikolwiek tekst w polu TextBox2. Nie musimy tego robić, dzięki temu jednak będziemy mogli wpisywać tekst automatycznie i zastąpić każdy istniejący tekst w polu TextBox2. Jeżeli jednak nie gustujecie w takich operacjach, to możemy się ich pozbyć poprzez usuniecie wiersza TextBox2.Select.

Widzicie jak to działa? Wpisujecie pierwszy znak w pole tekstowe i w momencie, gdy tylko zwolnicie klawisz, uruchamia się odpowiedni podprogram. Podprogram sprawdza, ile znaków zostało wpisanych. Na razie mamy tylko jeden znak, więc nic się nie dzieje. Teraz trochę adrenaliny – wpisujemy drugi znak, i co? Też nic się nie dzieje. Teraz wiekopomna chwila – wpisujemy trzeci znak i… tak, kursor przechodzi do pola TextBox2.

Mam nadzieję, ze o to właśnie Ci chodziło, TJ.

Uwaga: Jak się zapewnie domyślacie, podprogram TextBoxCheck2 jest bardzo podobny, z tą różnica, że uruchamia się po wpisaniu czegoś w pole tekstowe TextBox2; jeżeli zaś wpiszemy więcej niż 3 znaki, fokus automatycznie przechodzi do trzeciego pola tekstowego (TextBox3).

Mam nadzieję, ze tyle wystarczy, TJ. Można oczywiście ograniczyć rodzaj znaków do cyfr, ale to ćwiczenie zostawię sobie na inny skrypt, może jutro, kto wie…

Chociaż odkładanie czegoś „na jutro” nie jest w dobrym tonie, dlatego też zrobię to teraz, a w sumie już zrobiłem w innym artykule, o ile mnie pamięć nie myli. Zapraszam więc do archiwalnego artykułu, w którym znajdziecie skrypt zajmujący się problemem ograniczenia znaków, które mogą być wpisane w dane pole tekstowe.

To chyba już rzeczywiście na tyle, tak się zapisałem, ze straciłem rachubę chusteczek… sekundę… napoczynam trzynastą. Niech lepiej mój Skrypciarski kot trzyma się z daleka, bo grypa murowana…

 Do początku strony Do początku strony

Centrum skryptów - Microsoft Office