EENTO Keypress

lunedì 26 novembre 2012 - 12.34
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Visual Studio 2008

boggia Profilo | Newbie

Ciao a tutti, come faccio ad aggiungere l'evento keypress nella lista degli eventi di una textbox per esempio ?

In questo momento non riesco a intercettare questo evento, per esempio, se scrivo questa funzione

"Private Sub Form1_KeyPress(ByVal send As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_autocomplete.keypress"

mi ritorna l'errore "impossibile trovare l'evento keypress" ...anche se mi riconosce senza problemi il tipo
"System.Windows.Forms.KeyPressEventArgs"

Grazie per l'aiuto

ridaria Profilo | Expert

>Ciao a tutti, come faccio ad aggiungere l'evento keypress nella
>lista degli eventi di una textbox per esempio ?
>
>In questo momento non riesco a intercettare questo evento, per
>esempio, se scrivo questa funzione
>
>"Private Sub Form1_KeyPress(ByVal send As Object, ByVal e As
>System.Windows.Forms.KeyPressEventArgs) Handles txt_autocomplete.keypress"
>

ma il key press è sulla form ? o nella text Box?


Questo è l'evento keyPress di una text Box:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

CIAo
Riccardo D'Aria

boggia Profilo | Newbie

Nella textbox, il nome della funziona è casuale, scusate l'imprecisione ...

Per completezza, dopo la parola Handles (" Private Sub Form1_KeyPress(ByVal send As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ") metto l'id della mia textbox, e lui mi propone solo i seguenti eventi:

DataBinding
Disposed
Init
Load
PreRender
textchanged
OnLoad

ridaria Profilo | Expert

SCUSA non avevo visto che era asp.net.


Che mi risulti non esiste l'evento keypress per un controllo textBox in asp.net (almeno in ver 3.5).

........ devi gestirlo via js.


CIAO

Riccardo D'Aria

boggia Profilo | Newbie

Ok, penso che gli eventi keypress non esistano su asp vb .net, mi sono aggiustato utilizzando js :

<asp:TextBox ID="txtMaintCost" onkeypress="GetDate()" runat="server"></asp:TextBox>

L'evento onkeypress funziona, ora il problema è chiamare la funzione vb (lato server) da js, (ho provato con varie guide il pagemethod ma non funziona) ecco il codice:

<script type="text/javascript">
function GetDate() {
alert('evento presskey');
PageMethods.GetData(OnGetDataComplete, OnGetDataError);
}
</script>


evento nella pagina vb :

<System.Web.Services.WebMethod()> Public Function GetData()

label1.Text = "oooooooooo"
End Function

Dove sbaglio ? ci sono altri modi per chiamare la funzione vb da js ? grazie ragazzi

ridaria Profilo | Expert

il web sevice è il metodo.

Ma cosa devi fare di preciso?

Nella texT ci deve andare una data a quanto ho capito GIUSTO?


E PERCHé vuoi gestire l'evento keyPress?

fammi capire magari può esserci un'altra strada.


Ciao


Riccardo D'Aria

boggia Profilo | Newbie

I nome delle funzioni sono casuali, ho fatto milioni di prove e ogni volta prendo pezzi di codice in giro, ora espongo il rpoblema completo:

Ho una dropdownlist popolata dinamicamente da una tabella, a fianco di questa drop ho una textbox che funge da ricerca, l'idea è che ad ogni carattere inserito in questa textbox (usando per forza l'evento js onkeypress visto che asp non ha niente di simile) effettuo una ricerca negli item della drop e seleziono il primo oggetto contente i caratteri scritti nelle textbox (tipo autocomplete di google), naturalmente la ricerca la implemento tramite funzione VB che richiamerei tramite JS ...

Che ne dite ? è una pazzia ? mi mancherebbe solo un modo per chiamare questa funzione da js ...

Tutto ciò sarebbe bello perchè funzionerebbe senza installare nessun plugin di vario genere e di dubbia compatibilità ...

ridaria Profilo | Expert

>I nome delle funzioni sono casuali, ho fatto milioni di prove
>e ogni volta prendo pezzi di codice in giro, ora espongo il rpoblema
>completo:
>
>Ho una dropdownlist popolata dinamicamente da una tabella, a
>fianco di questa drop ho una textbox che funge da ricerca, l'idea
>è che ad ogni carattere inserito in questa textbox (usando per
>forza l'evento js onkeypress visto che asp non ha niente di simile)
>effettuo una ricerca negli item della drop e seleziono il primo
>oggetto contente i caratteri scritti nelle textbox (tipo autocomplete
>di google), naturalmente la ricerca la implemento tramite funzione
>VB che richiamerei tramite JS ...

se vuoi fare questa cosa, e ad ogni carattere digitato vuoi fare un call back al server?
direi poco funzionale.
Ad ogni carattere un post back al server? Noooooooooooooo.

Allora devi usare i ajax di vb.net ed i panel, ma anche questa è una soluzione poco elegante a mio avviso.

POSTO che la dropDown list è già di per se uno strumento di ricerca finale, ad uso dell'utente, che la apre e sceglie cosa gli occorre.
Non vedo perché deve digitare nella text per cercare nella comboBox, la apre e trova ciò che gli occorre.

Vedo una forzatura in ciò che vuoi fare.
CIAO



Riccardo D'Aria

boggia Profilo | Newbie

Ciao, sono daccordissimo con te, soprattutto sul fatto che effettuo continue chiamate lato server, sul fatto che le dropdown dovrebbero rimanere cosi ok però la mia contiene un lunga lista di clienti, e la ricerca risulta (a me andrebbe molto più che bene cosi)
difficoltosa, nel senso ci metti qualche secondo a trovare la riga interessata, con la ricerca sarebbe più veloce e magari anche dimenticando l'inizio esatto del nome l'utente troverebbe quello che cerca in tempi rapidi, se mi dici che sviluppare in ajax è una buona idea hai qualche base da darmi ? non conosco molto il linguaggio, è un'estensione di js giusto ? ... ora che conosci a fondo il mio problema se hai anche altre strade da propormi sono ben disposto a cambiare ...

grazie per il prezioso aiuto ...

ridaria Profilo | Expert

>la mia combo contiene un lunga lista di clienti,
>e la ricerca risulta (a me andrebbe molto più che bene cosi)
>difficoltosa, nel senso ci metti qualche secondo a trovare la
>riga interessata, con la ricerca sarebbe più veloce e magari
>anche dimenticando l'inizio esatto del nome l'utente troverebbe
>quello che cerca in tempi rapidi.

e questo è il punto.

Inutile caricare i clienti nella combo e poi farli cercare all'utente, ed in aggiunta una text dove mettere del testo per cercare nella combo.

1) elimina la combo.
2) costruisci uno strumento di ricerca con la textBox ed un pulsante "Trova".
All'utente occorre il soggetto Rossi SPA?
Digita Rossi SPA nella text e clicca su trova.

POtresti affinare lo strumento di ricerca inserendo anche una combo che contiene i vari campi ove cercare:
Ragione Sociale;
Cognome;
Provincia;

Quindi mette il testo nella text sceglie dove cercare nella combo (in ragione sociale o in cognome ecc .....)

Ed ottiene il risultato.

Ancora se hai dimistichezza con SQL gli metti un operatore like nella query SQL e ti trovi tutto ciò che inizia/contiene le parole digitate nella textBox di ricerca.

Tutto ciò senza js ajax o altro.

CIAO


fammi sapere

>grazie per il prezioso aiuto ...
Prego :-)





Riccardo D'Aria

boggia Profilo | Newbie

Scusate l'assenza, mi ero chiuso in cantina per vedere il problema, la tua soluzione mi sembra la più logica e funzionale, e inizialmente la mia applicazione funzionava così (all'incirca), solo che l'applicazione riguarda delle segnalazione anomalie, quindi da un gg all'alltro ci saranno nuovi clienti, che devono essere a video perchè se no l'utente non può sapere che chi sono ... in definitiva ho proseguito con JS, a mio dire ostico come linguaggio, e il debug (ho usato firebug) non è molto intuitivo, vi posto qui sotto il codice, il risultato è ottimo, veloce, tutto lato client, quindi senza continue chiamate al server (NON puoi criticarmi sto giro =) ) ... la funzione qui sotto scrivendo nella textbox seleziona automaticamente il record delle drop che contiene i caratteri scritti nella txt, tutto ciò ad ogni pressione del tasto (sulla textbox), scrive inoltre il n° di occorrenze trovate ... e tutto commentato a prova di becero .... non male no ?? grazie per l'aiuto =) ditemi cosa ne pensate che chiudo il 3ads ...


<head runat="server">
<title>testOnkeyPress</title>

<script type="text/javascript">
function find()
{
var drpList = document.getElementById("drp"); //elemento drop
var txtFind = document.getElementById("txtbox").value; //contenuto della textbox
var txtFindLowerCase = txtFind.toLowerCase(); //tutto minuscolo
var dimesion = drpList.options.length; //n° di item della drop
var numberOfOccurrence = 0 //n° di occorrenze trovate
var i = 0;

do {
var drpItemLowerCase = drpList.options[i].value.toLowerCase(); //item della drop tutto minuscolo
var indexOf_drp = drpItemLowerCase.indexOf(txtFindLowerCase); //-1 se non trova l'occorrenza (vedere indexOf)

if (indexOf_drp != -1)
{
drpList.options[i].selected = true; //seleziono l'item che contiene l'occorrenza
numberOfOccurrence = numberOfOccurrence +1 //conto quante ne trovo
}

i = i + 1;
} while (i < dimesion);

document.getElementById("txtOccorrenza").value = numberOfOccurrence
}


</script>

</head>
<body>
<form id="form1" runat="server">
<div style=" padding:100px">

<asp:DropDownList runat="server" ID="drp">
<asp:ListItem>ciao spa</asp:ListItem>
<asp:ListItem>HEELO srl</asp:ListItem>
<asp:ListItem>ajjj aaa</asp:ListItem>
<asp:ListItem>toooo ti top</asp:ListItem>
<asp:ListItem>HEELO ssl</asp:ListItem>
<asp:ListItem>cc spa</asp:ListItem>
</asp:DropDownList>

<asp:TextBox id="txtbox" runat="server" onkeyup="find();"></asp:TextBox>
<asp:TextBox ID="txtOccorrenza" runat="server" Enabled="FALSE"></asp:TextBox>

</div>
</form>
</body>
</html>

ridaria Profilo | Expert

OK se fa ciò che ti occorre ed i tempi sono regionevolmente veloci va bene perché non dovrebbe!



CIAO

Chiudi il treadh
Riccardo D'Aria
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