none
Intercettare tasto invio in evento BottonClick RRS feed

  • Domanda

  • Salve

    vi scrivo per avere info su come poter mettere in attesa, senza usare il Thread.Sleep, fino alla pressione del tasto invio o di un bottone specifico?

    Di seguito un esempio: 

    private void button1_Click(object sender, EventArgs e)
            {
               if(Variabile==true)
                 {
                   //Attesa pressione tasto invio o pressione     bottone dedicato
                  }
                // continuo programma
            }

    Non ho idea di come intercettare la pressione del tasto "Enter", poiché sono nell'evento Button_Click, e la pressione di un'altro bottone.

    Grazie a tutti.

    Francesco


    martedì 21 febbraio 2017 17:38

Risposte

  • Ciao,

    io leggerei il file e metterei tutte le righe in una lista con un contatore a livello di classe per tenere la posizione.

    Farei poi una funzione elaboraRiga che elabora la riga corrente ed incrementa il contatore.

    al lancio della funzione di elaborazione totale inserisci un ciclo che per ogni riga se non è selezionata la funzione manuale richiama elaboraRiga altrimenti termina

    Ad ogni pressione del pulsante richiami elaboraRiga

    Ciao

    Alessio

    • Contrassegnato come risposta Lollo_CC martedì 28 febbraio 2017 10:10
    venerdì 24 febbraio 2017 09:09

Tutte le risposte

  • Ciao

    ti conviene ragionare ad eventi.

    Dichiara a livello di classe una variabile tipo

    bool buttonPressed=false;

    sul click del bottone la setterai a true e magari se l'utente ripreme il pulsante magari di nuovo a false, a seconda di quello che vuoi fare.

    adesso puoi intercettare l'evento KeyPress del controllo in cui vuoi controllare venga premuto l'invio, quindi una textbox oppure il form stesso e in quell'evento

    if (e.KeyChar == Keys.Enter && buttonPressed) {
    //eseguo
    }

    Ciao

    Alessio

    martedì 21 febbraio 2017 18:00
  • Non puoi bloccare l'interfaccia utente di una applicazione windows chiedendo di premere il tasto invio, non funziona così.

    Come ha giustamente indicato Alessio, se dopo la pressione del bottone vuoi che venga premuto il tasto invio per eseguire qualcosa, devi fare 2 event handler, il primo sul button, che come ha detto Alessio, setterà a True una variabile booleana a livello di classe.

    Il secondo event handler sarà sul Key_up o sul Key_Down o sul Key_Press quello che preferisci usare, della form in cui hai implementato il button.

    Devi anche settare il parametro KeyPreview della form a True se vuoi che l'evento sia intercettato.

    Nell'event handler del Key_Up per esempio, controlli quale tasto è stato premuto, e se il tasto è Enter, e la variabile Boolean che hai settato nel button è a true, esegui quello che ti serve.

    Fatto questo rimetti la variabile Boolean a false e hai fatto.

    Puoi anche controllare nel Key_Up che se la variabile Boolean non è a true, quindi nessuno ha premuto il button, l'operazione non viene effettuata.

    Però se ci spieghi meglio cosa vuoi fare, magari ti diamo delle informazioni più pertinenti.


    Sabrina C. - http://www.dotnetwork.it

    mercoledì 22 febbraio 2017 11:43
  • Alessio, Sabrina

    Grazie per le risposte, sto cercando di creare un interprete di file di testo, che ad ogni parola (letta appunto da un file .txt) effettua un determinata operazione.

    Questo funziona di normale in automatico, iniza dalla prima parola ed arriva fino all'ultima, in determinate situazioni (quando una variabile viene messa a 1) mi piacerebbe poter mandare il programma in manuale, cioè ad ogni pressione del tasto invio o attraverso la pressione di un bottone andare a leggere solo una parola alla volta.

    Di seguito un parte di codice (se può servire).

    private void button1_Click(object sender, EventArgs e) { List<string[]> listaRighe = new List<string[]>(); while (!sr.EndOfStream) { linesett = sr.ReadLine(); strutt = linesett.Split(separator, StringSplitOptions.RemoveEmptyEntries); listaRighe.Add(strutt); // Aggiunge i dati letti alla struttua listaRighe } } timer1.Start();

    for (int i = 0; i < listaRighe.Count&&Step==1; i++)

    { // se attivo variabile attesa pressione tasto "ENTER" o botton switch (listaRighe[i][0]) . . .

    }

    }

    Grazie A tutti.

    Francesco

    venerdì 24 febbraio 2017 08:59
  • Ciao,

    io leggerei il file e metterei tutte le righe in una lista con un contatore a livello di classe per tenere la posizione.

    Farei poi una funzione elaboraRiga che elabora la riga corrente ed incrementa il contatore.

    al lancio della funzione di elaborazione totale inserisci un ciclo che per ogni riga se non è selezionata la funzione manuale richiama elaboraRiga altrimenti termina

    Ad ogni pressione del pulsante richiami elaboraRiga

    Ciao

    Alessio

    • Contrassegnato come risposta Lollo_CC martedì 28 febbraio 2017 10:10
    venerdì 24 febbraio 2017 09:09
  • Concordo con quanto indicato da Alessio, fatto salvo che nella lista per come lo hai descritto vanno messe le parole non le righe del file.

    Se c'è anche la punteggiatura devi decidere come gestirla.

    saluti


    Sabrina C. - http://www.dotnetwork.it

    venerdì 24 febbraio 2017 16:25
  • Hai ragione Sabrina, un piccolo errorino :D
    venerdì 24 febbraio 2017 19:55
  • Alessio, Sabrina

    grazie ancora per le risposte, ho risolto seguendo i vostri preziosi consigli.

    Ancora grazie.

    Francesco

    venerdì 24 febbraio 2017 21:38
  • Ottimo,

    adesso puoi segnare come riposta i post che ti hanno aiutato in modo da chiudere il thread ed aiutare chi potrebbe avere problemi simili ai tuoi

    Ciao

    Alessio

    sabato 25 febbraio 2017 21:27