domenica 22 febbraio 2009

Compact Framework disabilitare il suggerimento nelle textbox

Riporto l'articolo scritto per il sito iprogrammatori http://www.iprogrammatori.it/articoli/programmazione/art_compact-framework-disabilitare-il-sugger_609.aspx riguardante lo sviluppo smart device.




Tramite le api di Windows Mobile, vedremo come applicare ad una casella di testo, la possibilità di evitare il suggerimento, che compare quando si digita del testo in tale casella.


Inseriamo in una form, due caselle di testo con le relative label, di quest’ultima, in una applichiamo alla proprietà text, il seguente testo “Senza Suggerimento” mentre nell’altra sempre per la proprietà text il valore “Suggerimento”, il tutto come mostrato in figura 1.



Figura 1


Stesura del codice.


Inseriamo lo spazio dei nome, per la gestione delle api, di seguito si riporta il frammento di codice di tale dichiarazione.


VB.Net

Imports System.Runtime.InteropServices

C#

using System.Runtime.InteropServices;


Ora inseriamo la dichiarazione di api, in particolare utilizzeremo le funzioni di api, GetCapture della dll coredll, SHSetInputContenxt della dll aygshell ed infine la funzione SHSetInputContext .


Di seguito si riporta il frammento di codice delle suddette operazioni oltre alla creazione di un enum per disabilitare il suggerimento.



VB.Net

'dichiarazione di api

"coredll")> _

Private Shared Function GetCapture() As IntPtr

End Function


"aygshell")> _

Private Shared Function SHSetInputContext(ByVal hwnd As IntPtr, ByVal dwFeature As SHIC_FEATURE, ByVal lpValue As String) As Integer

End Function

"aygshell")> _

Private Shared Function SHSetInputContext(ByVal hwnd As IntPtr, ByVal dwFeature As SHIC_FEATURE, ByRef lpValue As Integer) As Integer

End Function



_

Enum SHIC_FEATURE

SHIC_FEATURE_RESTOREDEFAULT = 0

SHIC_FEATURE_AUTOCORRECT = 1

SHIC_FEATURE_AUTOSUGGEST = 2

SHIC_FEATURE_HAVETRAILER = 3

SHIC_FEATURE_CLASS = 4

End Enum

C#

//dichiarazione di api

[DllImport("coredll")]

extern static IntPtr GetCapture();


[DllImport("aygshell")]

extern static int SHSetInputContext(IntPtr hwnd, SHIC_FEATURE dwFeature, string lpValue);

[DllImport("aygshell")]

extern static int SHSetInputContext(IntPtr hwnd, SHIC_FEATURE dwFeature, ref int lpValue);


[Flags]

enum SHIC_FEATURE

{

SHIC_FEATURE_RESTOREDEFAULT = 0,

SHIC_FEATURE_AUTOCORRECT = 0x00000001,

SHIC_FEATURE_AUTOSUGGEST = 0x00000002,

SHIC_FEATURE_HAVETRAILER = 0x00000003,

SHIC_FEATURE_CLASS = 0x00000004

}


Ora nell’evento load della form, utilizziamo le api, per disabilitare il suggerimento alla prima casella di testo, mentre nella seconda, non impostiamo nulla.


Di seguito si riporta il frammento di codice situato nell’evento load della form, per disabilitare il suggerimento della prima casella di testo.




VB.Net

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

txtnonSuggerimento.Capture = True

Dim nosuggerimento As IntPtr = GetCapture()

txtnonSuggerimento.Capture = False

Dim ret As Integer

Dim FALSO As Integer = 0

ret = SHSetInputContext(nosuggerimento, SHIC_FEATURE.SHIC_FEATURE_AUTOSUGGEST, FALSO)


End Sub

C#

private void Form1_Load(object sender, EventArgs e)

{

txtnonSuggerimento.Capture = true;

IntPtr nosuggerimento = GetCapture();

txtnonSuggerimento.Capture = false;

int ret;

int FALSO = 0;

ret = SHSetInputContext(nosuggerimento, SHIC_FEATURE.SHIC_FEATURE_AUTOSUGGEST, ref FALSO);


}




Conclusioni


Ora che abbiamo scritto il nostro codice, non ci resta che testare l’applicativo, avviamolo, e digitiamo, tramite la tastiera virtuale, un testo in cui il sistema ci suggerisce a video la parola delle prime lettere che stiamo digitando.


Nella prima casella il suggerimento sarà disabilitato, quindi non vedremmo nessuna parola, mentre nella seconda casella verranno visualizzati i suggerimenti.


Tramite la parola download potete scaricare il file utilizzato in questo articolo.

Download

Nessun commento: