Principale utente con più risposte
[VS 2015] premere un tasto sulla tastiera e scriverne un'altro

Domanda
-
Buongiorno a tutti, utilizzando questo codice:
Private Sub DatiModificati_KeyPress(sender As Object, e As KeyPressEventArgs) Handles _ SaldoIniziale.KeyPress, SaldoFinale.KeyPress, TotalePresunto.KeyPress, TotaleEvaso.KeyPress, ImportoFido.KeyPress, TotaleImpFat.KeyPress, TotaleImpFatEvaso.KeyPress '------ Controllare il flag viene impostato nell'evento KeyDown. ------------------------ If nonNumberEntered = True Then 'Fermare il personaggio venga stipulato il controllo dal momento che è non-numerico. e.Handled = True End If pressionetasto = True End Sub Private Sub SaldoIniziale_KeyDown(sender As Object, e As KeyEventArgs) Handles SaldoIniziale.KeyDown '------ da inserire in TextBox_KeyDown ---------------------------- 'Inizializza il flag su false. nonNumberEntered = False 'Determinare se il tasto è un numero della parte superiore della tastiera. If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then 'Determinare se il tasto è un numero del tastierino. If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then 'Determinare se il tasto è un ",". If e.KeyCode <> Keys.Oemcomma Then 'Determinare se il tasto è un backspace. If e.KeyCode <> Keys.Back Then 'È stato premuto un tasto non numerico. 'Impostare il flag su true e valutare in evento KeyPress. nonNumberEntered = True End If End If End If End If 'Se è stato premuto il tasto shift, non è un numero. If Control.ModifierKeys = Keys.Shift Then nonNumberEntered = True End If End Sub
per far scrivere soltanto i numeri e la virgola "," in alcune caselle testo, stavo cercando il modo di poter far scrivere la virgola "," anche con la pressione del tasto punto "." sia quello sulla riga dello shift che quello del tastierino numerico....ma continuo a sbattere la testa...
qualcuno riesce ad aiutarmi?
Grazie
Guido
Risposte
-
Si, li ci devi mettere la virgola, in quanto il sistema interpreta quello che hai scritto nel tuo modo di scrivere (hai le impostazioni italiane, dove la parte decimale si scrive dopo una virgola) e traduce la tua rappresentazione di un numero, in un numero.
Però solo ora ho capito cosa intendi fare, ad una prima lettura tra tabelle di database, impostazioni ed altro, non avevo capito.
Per sostituire il punto, sia quello del tastierino numerico e "sia quello sulla riga dello shift" puoi intercettare la pressione del tasto sulla tastiera nell'evento KeyPress, e sostituire il valore KeyChar dell'argomento ti tipo KeyPressEventArgs.
Fatto al volo:
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = "." Then e.KeyChar = "," End Sub
- Contrassegnato come risposta Guido.G giovedì 2 aprile 2020 19:02
Tutte le risposte
-
Praticamente in qualsiasi linguaggio di programmazione che puoi menzionare, i decimali sono rappresentati da un punto, non da una virgola. Se i tuoi utenti si aspettano una virgola, convertila per scopi di visualizzazione e immissione, ma dovrai utilizzare un punto all'interno del codice.
Si spera che non si stia tentando di utilizzare Input #, che intende solo leggere i dati scritti da Write # che utilizza sempre formati "universali" (in questo caso periodo come punto decimale).
Il problema potrebbe essere dovuto all'uso della funzione Val; quello non è internazionale. Il testo di aiuto raccomanda l'uso di CDbl durante la conversione da stringhe a numeri.
Val, Str utilizzerà sempre le impostazioni USA (punto come decimale)
Cdbl, Format terrà conto delle impostazioni regionali.• Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.
-
Il campo che cerco di gestire è da :
che mi impone di usare la virgola"," altrimenti mi da errore.
e in tabelle tipo:
CREATE TABLE [dbo].[Table_DatiPredefiniti] ( [Id] INT IDENTITY (1, 1) NOT NULL, [DescrizionePredefinita] NVARCHAR (500) NULL, [ValorePredefinito] DECIMAL (8, 2) NULL, [c1] NVARCHAR (50) NULL, [c2] NVARCHAR (50) NULL, PRIMARY KEY CLUSTERED ([Id] ASC) );
Ho provato a modificare il codice che trasferisce il valore in questo modo:
My.MySettings.Default.SaldoIniziale = CDec(SaldoIniziale.Text)
ma se io scrivo 123.50 nel MYSetting viene memorizzato come 12350.
- Modificato Guido.G giovedì 2 aprile 2020 11:33 implementazione
-
Ciao,
non fare confusione tra ciò che è un numero e quella che è la sua "rappresentazione" leggibile.
Da codice, devi passare un oggetto di tipo Decimal per impostare il valore di SaldoIniziale. Un oggetto Decimal non ha ne un punto, ne una virgola. La sua rappresentazione leggibile, ha invece un punto o una virgola, per separare la parte intera da quella decimale, in base alle impostazioni del pc su cui gira l'applicazione.
Anche la funzione CDec conosce le impostazioni del tuo pc, quindi se vuoi convertire una stringa in un decimal tenendo conto della parte decimale, devi passare a quella funzione una stringa che utilizza la virgola come separatore. La stessa cosa non funzionerebbe allo stesso modo se tu avessi, per dire, un pc con un sistema operativo in inglese.
Se lanci un comando sql per aggiornare un database, dovrai passare sempre il punto come separatore, dato che quel linguaggio (e tutti i linguaggi di programmazione che conosco) usano il punto come "rappresentazione" di un numero quando serve indicare la parte decimale.
- Proposto come risposta Yordan IvanovMicrosoft contingent staff, Moderator giovedì 2 aprile 2020 17:01
-
-
Si, li ci devi mettere la virgola, in quanto il sistema interpreta quello che hai scritto nel tuo modo di scrivere (hai le impostazioni italiane, dove la parte decimale si scrive dopo una virgola) e traduce la tua rappresentazione di un numero, in un numero.
Però solo ora ho capito cosa intendi fare, ad una prima lettura tra tabelle di database, impostazioni ed altro, non avevo capito.
Per sostituire il punto, sia quello del tastierino numerico e "sia quello sulla riga dello shift" puoi intercettare la pressione del tasto sulla tastiera nell'evento KeyPress, e sostituire il valore KeyChar dell'argomento ti tipo KeyPressEventArgs.
Fatto al volo:
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress If e.KeyChar = "." Then e.KeyChar = "," End Sub
- Contrassegnato come risposta Guido.G giovedì 2 aprile 2020 19:02
-
Grazie Mizio, avevo provato anche ad inserire "Option Strict On" per vedere se fosse la mancanza di questo comando, ma effettivamente non cambia nulla, quindi ho inserito il tuo codice, vedi quanto sono in dietro...io conoscevo questa sintassi:
If e.KeyChar = "." Then e.KeyChar = CChar(",") End If
e non quella che hai postato...ho imparato anche questo
però per poterla usare ho dovuto inserire nel listato precedente:
'Determinare se il tasto è un ".". If e.KeyCode <> Keys.Decimal Then end if
altrimenti non fa scrivere il punto e quindi non lo trasforma.
Grazie per l'aiuto.
Guido