Wywołanie metody/zdaRZenia po naciśnięciu przycisku na klawiaturze / asp.net

0

Cześć,

Potrzebuję pomocy, przy użyciu/przechwyceniu klawisza na klawiaturze w asp.net. Chodzi o coś takiego:

Uruchamiam aplikację:

  1. Naciskam na klawiaturze przycisk np. "a" lub "esc" bez znaczenia jakikolwiek przycisk (w zasadzie może to być podpięte pod jakiś np. też button który ukryję z poziomu asp).
  2. Przechwytuję, że akurat był naciśnięty przycisk i wywołuję metodę (pkt 3.)
  3. Metoda startCzas() ---> Startuje timer (liczy czas) - tu akurat sobie poradzę
  4. Naciskam drugi przycisk np. "b" zatrzymuję czas (metodę - to też sobie poradzę).

Nie potrafię przechwycić zdarzenia przycisku i podpiąć pod ten przycisk wywołania metody(na webForms) na (winForms - potrafię)

Dzięki za pomoc

0

Może zadam inaczej pytanie. Jak wywołać metodę na winforms po naciśnięciu np na klawiaturze przycisku "a"

0

To w końcu webforms czy winforms?

W winforms masz zdarzenia KeyDown, KeyPress, KeyUp, PreviewKeyDown.

0

Sorry, mój błąd. Chodzi mi o WebForms.

0

Wciśnięcie przycisków w przeglądarce musisz przechwycić JavaScriptem, sugeruję użyć biblioteki jQuery do ułatwienia zadania. Następnie ze skryptu wysyłasz żądanie ajaxowe na serwer, gdzie odpowiedni handler (albo metoda twojej strony) je obsłuży.
Prawdopodobnie lepiej by było, gdyby timer chodził po stronie klienckiej, nie serwerowej.

Co dokładnie chcesz osiągnąć? Jesteś pewien, że potrzebujesz do tego serwera?

0
somekind napisał(a):

Wciśnięcie przycisków w przeglądarce musisz przechwycić JavaScriptem, sugeruję użyć biblioteki jQuery do ułatwienia zadania. Następnie ze skryptu wysyłasz żądanie ajaxowe na serwer, gdzie odpowiedni handler (albo metoda twojej strony) je obsłuży.
Prawdopodobnie lepiej by było, gdyby timer chodził po stronie klienckiej, nie serwerowej.

Co dokładnie chcesz osiągnąć? Jesteś pewien, że potrzebujesz do tego serwera?

Aplikacja jest napisana w asp, więc nie wiem czy da się uruchomić timer po stronie klienckiej. Co chcę osiągnać --> mam uruchomioną na aplikację na komputerze z ekranem dotykowym (aplikacja webform) pod komputer jest podpięte urządzenie które ma dwa przyciski (zaprogramowane jak klawiatura - pod jeden podpięty jest przycisk np. "a" pod drugi np. "b") wciskam "a" timer startuje" wciskam "b" timer się zatrzymuje ---> mam zliczony czas który wyświetlam na ekranie. Na WinForm da się to w miarę prosto i szybko osiągnąć, ale na WebForms już nie jest to dla mnie takie proste i oczywiste... tym bardziej, że nie ma zdarzeń o których pisał kolega wcześniej.

1
WuWu napisał(a):

Aplikacja jest napisana w asp, więc nie wiem czy da się uruchomić timer po stronie klienckiej.

Po stronie klienckiej masz przeglądarkę, więc masz JavaScript i możesz w pełni korzystać z tego języka:
https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Timers
http://www.sitepoint.com/jquery-settimeout-function-examples/
Ale to Ci się chyba nie przyda, jeśli Twoim celem jest odpalenie jakichś metod na serwerze.

Na WinForm da się to w miarę prosto i szybko osiągnąć, ale na WebForms już nie jest to dla mnie takie proste i oczywiste... tym bardziej, że nie ma zdarzeń o których pisał kolega wcześniej.

No nie ma, bo na serwerze nie można mieć bezpośredniego dostępu do zdarzeń, które dzieją się w przeglądarce użytkownika.

W przypadku WinForms to łatwe, bo cała aplikacja działa na jednym urządzeniu. W przypadku WebForms (jak i każdej technologii webowej) masz backend na serwerze i frontend w przeglądarce użytkownika. I to, co robi użytkownik musi najpierw przejść przez frontend, zanim dotrze do backendu. A ASP.NET to nie są czary mary, framework generuje frontendowy HTML i JavaScript, bo innych języków przeglądarki nie rozumieją.

0
somekind napisał(a):
WuWu napisał(a):

Aplikacja jest napisana w asp, więc nie wiem czy da się uruchomić timer po stronie klienckiej.

Po stronie klienckiej masz przeglądarkę, więc masz JavaScript i możesz w pełni korzystać z tego języka:
https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Timers
http://www.sitepoint.com/jquery-settimeout-function-examples/
Ale to Ci się chyba nie przyda, jeśli Twoim celem jest odpalenie jakichś metod na serwerze.

Na WinForm da się to w miarę prosto i szybko osiągnąć, ale na WebForms już nie jest to dla mnie takie proste i oczywiste... tym bardziej, że nie ma zdarzeń o których pisał kolega wcześniej.

No nie ma, bo na serwerze nie można mieć bezpośredniego dostępu do zdarzeń, które dzieją się w przeglądarce użytkownika.

W przypadku WinForms to łatwe, bo cała aplikacja działa na jednym urządzeniu. W przypadku WebForms (jak i każdej technologii webowej) masz backend na serwerze i frontend w przeglądarce użytkownika. I to, co robi użytkownik musi najpierw przejść przez frontend, zanim dotrze do backendu. A ASP.NET to nie są czary mary, framework generuje frontendowy HTML i JavaScript, bo innych języków przeglądarki nie rozumieją.

Jeśli chciałbym to obsłużyć po stronie klienta (przeglądarki) to czego powinienem szukać w javasctript? Zdarzenie "keypress" lub coś w tym stylu? Chodzi o to żeby timer startował dopiero kiedy wcisnę na klawiaturze konkretny klawisz.

0

No, np. keypress z jQuery: https://api.jquery.com/keypress/

0

Dzięki, za podpowiedź. Próbuję właśnie wykonać sobie testy, ale niestety nie wychodzi... co robię źle?

Mój kod
JVS:

 
    <script type="text/javascript" >
         function KeyEvent(event) {
            if ( event.keyCode == 61) {
                alert(event.keyCode);

                document.getElementById("<%=btnNextSource.ClientID%>").click();
            }
            return true;
        }
 
    </script>

ASP:

    <form id="form1" runat="server" >
    <div>
    
        <asp:Panel ID="Panel1" runat="server">
            
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                 
                        <asp:ScriptManager ID="ScriptManager1" runat="server">
                        </asp:ScriptManager>

                        <asp:Button ID="btnNextSource" runat="server" Text="Button" OnClick="btnNextSource_Click" />
                        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                    </ContentTemplate>
                </asp:UpdatePanel>
      
        </asp:Panel>
    
    </div>
        
    </form>
 

C#:

 
rotected void btnNextSource_Click(object sender, EventArgs e)
        {
            Label1.Text = "Test!";
        }
0

Pytanie, czy w ogóle jest możliwe wywołanie metody w taki sposób? Jeśli tak to jak to zrobić.

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