46 messaggi dal 01 novembre 2012
Buongiorno,

forse è una richiesta non reallizzabile.

in un Form ho 4 TextBox ed un Button con Enabled False.

Con il tasto invio regolarmente avanza da una textbox all'altra e se inserisco una voce, con l'invio il button da false diventa true ed è regolare.

Il button dovrebbe diventare true se inserisco o modifico la voce già inserita alla TextBox.

Auguro di essere stato chiaro nell'esporre il problema e fiducioso saluto.
Domenico
private void TextBox1_KewPress(object sender, KeyPressEventArgs e)
{
  if (e.KeyChar == (char)Keys.Enter)
  {
     if (TextBox1.Text.Length == 0)
     {
        TextBox2.Focus();
        return;
       }

       if (TextBox1.Text.Length >= 1)
       {
          Btn_Prova.Enabled = true;
       }
         TextBox2.Focus();
  }
}
Ciao!
non sono sicuro di aver capito bene il problema..
se hai bisogno di verificare se l'attuale valore della textbox sia stato cambiato da un valore inserito precedentemente, puoi creare una variabile generale che contenga il valore della textbox e controllare quella all'interno della condizione.

 public string MyTextBox1Value { get; set; } = string.Empty;

private void TextBox1_KewPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        if (TextBox1.Text.Length == 0)
         {
                 TextBox2.Focus();
                  return;
          }

          if (TextBox1.Text.Length !=  MyTextBox1Value )
         {
               MyTextBox1Value  =  TextBox1.Text
               Btn_Prova.Enabled = true;
          }
            TextBox2.Focus();
  }
}


se questo controllo lo devi fare per tutti i textbox, puoi creare un metodo unico così da avere la logica tutta in un unico punto, qualcosa tipo il seguente:

         public string MyTextBox1Value { get; set; } = string.Empty;
        public string MyTextBox2Value { get; set; } = string.Empty;
        public string MyTextBox3Value { get; set; } = string.Empty;
        public string MyTextBox4Value { get; set; } = string.Empty;

       private void ElaboraInvio(char keyChar, TextBox currentTxtBox, 
                                                    Control nextControl, string currentTextBoxValue)
        {
            if (keyChar == (char)Keys.Enter)
            {
                if (currentTxtBox.Text.Length == 0)
                {
                    nextControl.Focus();
                    return;
                }

                if (currentTxtBox.Text != currentTextBoxValue)
                {
                    currentTextBoxValue = currentTxtBox.Text;
                    button2.Enabled = true;
                }
                nextControl.Focus();
            }
        }
        
        
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            ElaboraInvio(e.KeyChar, textBox1, textBox2, MyTextBox1Value);          
        }      

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            ElaboraInvio(e.KeyChar, textBox2, textBox3, MyTextBox2Value);
        }

        private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            ElaboraInvio(e.KeyChar, textBox3, textBox4, MyTextBox3Value);
        }

        private void textBox4_KeyPress(object sender, KeyPressEventArgs e)
        {
            ElaboraInvio(e.KeyChar, textBox4, button2, MyTextBox3Value);
        }


praticamente il metodo "ElaboraInvio" prende come parametro il carattere da verificare se è INVIO, la textbox corrente, il controllo successivo da mettere in focus e la variabile di testo generale da andare a controllare.
poi in ogni textbox richiami questo metodo passando i parametri che ti servono.

Maurizio
46 messaggi dal 01 novembre 2012
Gent.mo Maurizio,

ringrazio della gentilezza e disponibilità.

Considerando 4 TextBox, ho preso in esame il secondo listato che funziona presentando due problemi.
Primo:
per es.:
avendo la terza TextBox inserito una voce e premendo l'invio dalla seconda alla terza, la voce diventa di colore azzurro senza cursore.
Ho inserito il seguente codice senza risultato:
> TextBox3.SelectionStart = TextBox3.Text.Length;

Secondo:
avendo la terza TextBox con la voce inserita e premendo invio, il Button diventa true invece dovrebbe diventare true se inserisco o modifico la voce esistente.

Mi scuso se approfitto e fiducioso, saluto.
Domenico.
Ciao!
purtroppo senza vedere il codice non sono in grado di aiutarti per questi due problemi! hai modo di postare l'intero codice all'interno del metodo keypress del textbox 3?
grazie mille!
Maurizio
46 messaggi dal 01 novembre 2012
Buonasera Maurizio,

ringrazio della disponibilità e sono rammaricato per il fastidio.

Come dicevo nella precedente che ho usato il tuo codice che va bene e nell'avanzare alla terza TextBox viene selezionata tutta la stringa senza il cursore ed il button dovrebbe essere true quando aggiungo o modifica la stringa.

Rinnovo le scuse ed auguro di essere stato chiaro ciò che desidero augurando una buona serata.
Domenico.

https://www.mediafire.com/file/ie3lg4ilenf6k7u/Evento+KeyPress.rar/file
Ciao!
Nessun bisogno di scusarsi, davvero!

penso che il problema sia dovuto al fatto che se uno dei campi è già compilato, è necessario pre-impostare al caricamento del form le variabili che contengono i valori da confrontare.

  public Form1()
        {
            InitializeComponent();
           MyTextBox3Value = TextBox3.Text;
        }


la variabile MyTextBox3Value viene così impostata con il valore inserito manualmente nella textbox al caricamento del form, in questo modo il codice dopo dovrebbe funzionare!
fammi sapere!
Maurizio
46 messaggi dal 01 novembre 2012
Gent.mo Maurizio,

dire grazie è troppo poco, funziona l'unico problema se si può risolvere è che non appare il cursore dove è inserita la stringa sulla TextBox.
La stringa appare seleziona con un colore (ble).

Auguro una buona giornata e grazie.

Domenico.
Il cursore dovrebbe comparire appena percettibile alla destra al fondo del testo della textbox selezionata.
Per il colore credo sia un impostazione di default in base al tema di windows.. non sono sicuro possa essere cambiato!
Maurizio

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.