Itercettare pressione tasto

martedì 06 novembre 2012 - 10.46
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010

danielsan27 Profilo | Newbie

Ciao, nuovo problema del giorno...
devo lanciare una sub VB.net da una pressione del tasto ESC su un controllo...esempio una <asp:table>

il controllo della pressione del tasto ESC l'ho fatto con una seeplice funzione lato client sulla mia pagina .aspx....ecc il codice:

<script type="text/javascript">
document.onkeyup = KeyCheck;
function KeyCheck() {
var KeyID = event.keyCode;
switch (KeyID) {
case 27:
//HO PREMUTO "ESC";
......qui andrebbe richiamata la mia sub che sta nella pagina di code behind...
}
}
</script>

Se esistono altri modi per fare questa cosa "magari direttamente da codice,senza passare x il jscript" x favore fatemi sapere, ringrazio

P.S. ma nn esistono eventi keypress/keydown direttaemnte per i controlli asp.net????????

alx_81 Profilo | Guru

>Ciao, nuovo problema del giorno...
ciao

>il controllo della pressione del tasto ESC l'ho fatto con una
>seeplice funzione lato client sulla mia pagina .aspx....ecc il
>codice:
>P.S. ma nn esistono eventi keypress/keydown direttaemnte per
>i controlli asp.net????????
comunque vanno fatti lato client, non puoi farli lato server, quindi al massimo puoi tu, sempre lato server, aggiungere degli attributi html che chiamano funzioni js.
Supponi di avere un asp:textbox con id txt1, puoi fare, lato server:

txt1.Attributes.Add("onKeypress", "F1();")

ma poi devi scriverti la F1() sul client.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

Perfetto...fin qui ci ero arrivato....
adesso...mettiamo che pero debba modificare un attributo di un controllo...la ns textbox x esempio...
il problema è proprio questo: COME SI FA A TOCCARE IL CODICE VB.NET....da javascript?????



alx_81 Profilo | Guru

>Perfetto...fin qui ci ero arrivato....
>adesso...mettiamo che pero debba modificare un attributo di un
>controllo...la ns textbox x esempio...
>il problema è proprio questo: COME SI FA A TOCCARE IL CODICE
>VB.NET....da javascript?????
Javascript sei sul client.. come fai a modificare un codice compilato lato server?
Vuoi chiamarlo? o modificarlo? Ti sto perdendo.. La seconda non si può fare.. La prima è una chiamata ajax.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

ti dico cosa volgio fare:

1)ho una form1 in una pagina aspx
2)volgio intercettare la pressione di un tasto su quella form
3)premuto quel tasto...ad esempio volgio impostare un testo su una label.....

è da stamttina che cerco mi sto sbattendo....boh

:(

alx_81 Profilo | Guru

>1)ho una form1 in una pagina aspx
>2)volgio intercettare la pressione di un tasto su quella form
e questo lo fai di certo sul client con js, con jquery per avere il cross browser:
$(document).keypress(function(e) { if (e.which == "13") { //enter pressed } });

>3)premuto quel tasto...ad esempio volgio impostare un testo su una label.....
ma lo vuoi fare direttamente lato client? oppure vuoi tornare a server, ricavare con un calcolo o qualche logica un valore che poi vuoi scrivere sulla label?
non capisco se vuoi fare roundrip a server o no.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

allora ho usato l'esempio della label per far prima...ti espongo il problema nella sua interezza...
ho una tabella <asp:table> molto grande nelle righe che nn ci sta dentro ad una pagina web CHE NON PUO SCORRERE
l'idea è quella di dividerla in piu pezzi mettendola ognuna in un panel
Solo 1 panel alla volta viene visualizzato, cosicche io vedo 1 solo pezzo della tabella alla volta
Ora...premendo un tasto esempio PG_DN...io vorrei che mi disattivasse quel panel e mi attivasse il successivo, cosicche risesco a "scorrere" la mia tabella nella sua interessa solo con i tasti....

Il fatto è ...che per far questo occorre settare le proprieta del panel visibile a true e false...che è un oggetto server...e da javascript nn lo so fare...
spero di esser stato chiaro :(

se riesco a farlo con una label....sono a posto è la stessa cosa col panel


dimenticavo...se sapevo far qualcosa prima col javascript...sono a zero con jquery.......son passato ad asp.net da 15 gg.........

alx_81 Profilo | Guru

>allora ho usato l'esempio della label per far prima...ti espongo
>il problema nella sua interezza...
>ho una tabella <asp:table> molto grande nelle righe che
>nn ci sta dentro ad una pagina web CHE NON PUO SCORRERE
>l'idea è quella di dividerla in piu pezzi mettendola ognuna in
>un panel
>Solo 1 panel alla volta viene visualizzato, cosicche io vedo
>1 solo pezzo della tabella alla volta
in poche parole stai facendo una paginazione personalizzata.
Riguardo a questo ti chiedo, hai pensato di mettere una tabella in un div ad altezza fissa (quella che ti puoi permettere) e fare lo scroll solo sul div?
In questo modo lo scroll rimane sul div e non sulla pagina, che "sta ferma".
Se però vuoi evitare di renderizzare troppi dati, anche perchè pesanti, e trovare il modo di paginare in un qualche altro modo, potresti pensare a due strade:
- strada classica asp.net: utilizzare il controllo gridview, che ti fa in automatico la paginazione con i link delle pagine nell'header e nel footer (customizzabili interamente), tipo questo: http://msdn.microsoft.com/en-us/library/aa479347.aspx
- strada decisamente più "nuova": utilizzare dei plugin con jQuery, tipo questi:
http://www.datatables.net
http://www.codeproject.com/Articles/37100/Client-Side-Gridview-Pagination-using-JQuery
http://www.overset.com/2008/08/30/animated-sortable-datagrid-jquery-plugin-jtps/

>Il fatto è ...che per far questo occorre settare le proprieta
>del panel visibile a true e false...che è un oggetto server...e
>da javascript nn lo so fare...
detto questo, un asp:Panel è un semplice div, quindi basta dargli un id e vedere come viene generato l'html per accedere al tag in questo modo:

// mostrare document.getElementById("idDiv").style.visibility = "visible"; // nascondere document.getElementById("idDiv").style.visibility = "hidden";

ricorda che ogni asp:control renderizza un equivalente in html, e basta fare delle prove per vedere cosa viene generato.
Ad esempio, una asp:Label è uno span, una asp:TextBox è un input con type="text". Nulla di più, alla fine se lo deve leggere un browser deve essere per forza html.

>dimenticavo...se sapevo far qualcosa prima col javascript...sono
>a zero con jquery.......son passato ad asp.net da 15 gg.........
certo, capisco, però il forum ti aiuta, ma se la base di documentazione è mancante, dovrai armarti di pazienza e studiare, non solo sul campo.
Personalmente, ti consiglio di cominciare a ragionare in html ed evitare gli asp:control (io ho lasciato asp.net da molto, preferendo il pattern asp.net MVC che mi dà molto più controllo) integrando sempre con un framework javascript, jQuery è stato incorporato nei template di progetto MS con visual studio. Un motivo c'è

Imparare jQuery è veramente semplice, e, se posso permettermi di darti un consiglio, studiatelo, in una serata impari a "montarlo" e ad usare la base. Non ci vuole nulla, semplicemente capire cosa sono i selettori css, il resto è molto semplice. Se hai bisogno, noi siamo qui anche per darti una mano in quello.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

detto questo, un asp:Panel è un semplice div, quindi basta dargli un id e vedere come viene generato l'html per accedere al tag in questo modo:

// mostrare
document.getElementById("idDiv").style.visibility = "visible"; <--------------- ma questo e' jquery ..o javascript??
// nascondere
document.getElementById("idDiv").style.visibility = "hidden";
ricorda che ogni asp:control renderizza un equivalente in html, e basta fare delle prove per vedere cosa viene generato.
Ad esempio, una asp:Label è uno span, una asp:TextBox è un input con type="text". Nulla di più, alla fine se lo deve leggere un browser deve essere per forza html.

capito...come faccio a vedere cosa realmente sono i miei controlli??? in temrini di html intendo...io uso vb2010

per le gridview lasciam stare..la mia tabella e' fatta "ad hoc" come una scacchiera che si riempie celle si e celle no

per ora portiam avanti la strada della gestione pressione tasto dalla mia pagina aspx e dal codice jquery che setta il "panel" visible = true o = false.

hai qualche "esempio vivo" che posso studiarmi??

cmq sia ti ringrazio da domani inzio a vedere jquery ma nn ho molto tempo e devo risolvere prima sta cosa che mi blocca lo sviluppo...

alx_81 Profilo | Guru

>// mostrare
>document.getElementById("idDiv").style.visibility = "visible";
><--------------- ma questo e' jquery ..o javascript??
javascript, jQuery è un livello "sopra" e ti consente di usare più semplicemente javascript.

>capito...come faccio a vedere cosa realmente sono i miei controlli???
>in temrini di html intendo...io uso vb2010
fai una pagina e ci metti gli asp:control che ti servono, poi la lanci e guardi la sorgente.. nulla più

>per le gridview lasciam stare..la mia tabella e' fatta "ad hoc"
>come una scacchiera che si riempie celle si e celle no
ok, allora è una table html, che tu hai fatto lato server con una asp:table

>per ora portiam avanti la strada della gestione pressione tasto
>dalla mia pagina aspx e dal codice jquery che setta il "panel"
>visible = true o = false.
>hai qualche "esempio vivo" che posso studiarmi??
secondo me devi partire da jQuery.com, c'è la documentazione. Altrimenti se mi chiedi un po' di esempi, posso prepararti una paginetta con i comportamenti (base, mi raccomando) che mi chiedi. Se può venirti comodo, però tu intanto devi studiartelo un po'. Considera poi che ci sono ottimi libri, vedi quelli di manning (jquery in action se non mi ricordo male).

>cmq sia ti ringrazio da domani inzio a vedere jquery ma nn ho
>molto tempo e devo risolvere prima sta cosa che mi blocca lo
>sviluppo...
ok, magari all'inizio accrocchia, ma poi cerca di studiarle queste cose, e se vuoi un consiglio, prova a creare un nuovo progetto MVC con vs2010 a titolo di studio.
Perchè queste cose sono il pane quotidiano per le webapp di oggi..
Fammi sapere.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

Allora prime prove col javascript da te suggerito...ho 2 pannelli in asp.net con ID panel2 e panel3...ho controllato l'html..e' come dici te..crea dei <div> con id "panel2" e "panel3"..ora ho messo le tue righe di codice dentro alla pagina ma mi da il seguente errore:
Errore di run-time di Microsoft JScript: Impossibile ottenere il valore della proprietà 'style': oggetto nullo o non definito

questo è il javascript ho usato il tasto "esc " come esempio

<script type="text/javascript">
document.onkeyup = KeyCheck;
function KeyCheck() {
var KeyID = event.keyCode;
switch (KeyID) {
case 27:

document.getElementById("panel3").style.visibility = "visible";
document.getElementById("panel2").style.visibility = "hidden";
}
}

</script>

dove sto sbagliando?

AGGIONAMENTO DEL 07.11 ore 09.00 FORSE CI SONO....gli ID sono CASE SENSITIVE....se metto panel2 mi da errore ma se scrivo "Panel2" NO...proseguo le prove.....

ORE 09.16....PICCOLO PROBLEMA...ho fatto un apagina con 2 panel (Panel1 e Panel2) con 2 semplici scritte dentro...1 si vede e 1 no...bene il codice:
body>
<form id="form1" runat="server">
<div id="risultato">
<asp:Panel ID="Panel1" runat="server">
pincopallino<asp:Button ID="Button1" runat="server" Text="Button" />
</asp:Panel>

<asp:Panel ID="Panel2" runat="server" Visible="False">
paperino</asp:Panel>

</div>

</form>
</body>

Ora...metto il javascript che premendo ESC mi setta visible il panel2 e nasconde il 1....MI DA ERRORE nel Javascript...non trova Panel2...perche???

codice:

<script type="text/javascript">
document.onkeyup = KeyCheck;
function KeyCheck() {
var KeyID = event.keyCode;
switch (KeyID) {
case 27:

document.getElementById("Panel2").style.visibility = "visible"; <...................ERRORE
document.getElementById("Panel1").style.visibility = "hidden";
}
}
</script>


è come se nell'html l'id "panel2" nn venga visto....boh

AGGIORNAMENTO ORE 09.39 ...HO CAPITO MA NN HO RISOLTO NULLA...SE METTO IL SECONDO PANEL A VISIBLE = TRUE...l'oggetto mi viene visto in JS e fila tutto liscio....ma se lo metto visible NON HO RISOLTO IL MIO PROBLEMA!!!! uno si deve vedere e l'altro no........
Non se ne esce..........

AGGIORNAMENTO ore 11.04...RISOLTO PARZIALMENTE :per risolvere il problema della "visibilita in html" al javascript del secondo pannello che inzialmente è non-visibile...ho utilizzato un controllo HIDDEN nella pagina aspx con un valore settato a 0.....nel javascript al codice collegato quando premo "ESC" mi limito ad assegnare a questo controllo HIDDEN il valore di 1....ora se metto il controllo in un pulsante di prova, questo valore viene controllato e se il valore e' 1 setta opportunamente la visibilita dei 2 pannelli..invertendoli...UNICO CASINO...questa cosa la dovrebbe fare in automatico direttamente ad ogni caricamento pagina...invece non funziona...l'evento form1_load della pagina viene lanciato 1 sola volta....tradotto in soldoni..devo trovare un modo per forzare il rilancio della pagina..........

alx_81 Profilo | Guru

>UNICO CASINO...questa cosa la dovrebbe fare in automatico direttamente
>ad ogni caricamento pagina...invece non funziona...l'evento form1_load
>della pagina viene lanciato 1 sola volta....tradotto in soldoni..devo
>trovare un modo per forzare il rilancio della pagina..........
fallo sul client, con jQuery, alla document ready vai a fare la show dei controlli..

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

danielsan27 Profilo | Newbie

Ciao, grazie x la risposta (e x il tempo dedicatomi)
Ho risolto tutto: spezzato la mia "tabellona" in 5 parti contenute in asp:panel con id = Panel_1 ..Panel_5
faccio tutto da jscript...intercetto i tasti e seconda di cosa premo setto :
document.getElementById("Panel_" + n).style.display = "block";
document.getElementById("Panel_" + n_old).style.display = "none";

Ovviamente la mia "tabellona" la riempio prima..cosi ho tutto pieno devo decidere solo che parte vedere...
Alla grande e grazie a tutti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5