2012-03-22 2 views
5

Questo è il mio primo tentativo di creare una GUI in MATLAB. Non sono stato in grado finora di trovare un modo per rilevare quando la messa a fuoco viene spostata da una modifica di testo a qualche altro oggetto. Ho bisogno di tale funzionalità in modo da poter testare "sul posto" l'input dell'utente e cambiare il colore dello sfondo del testo in rosso, se l'input è formato in modo errato.Come posso rilevare la perdita di concentrazione da un oggetto di modifica del testo?

In altre parole, sarebbe molto comodo per l'utente finale poter scrivere la sua espressione in una modifica di testo, quindi premere la scheda per passare alla modifica successiva del testo e allo stesso tempo vedere uno sfondo rosso nella prima modifica del testo in caso di problemi con l'input.

Ho pensato a diverse alternative per verificare l'input dell'utente ma non sono così convenienti come sopra. Come potrei implementare qualcosa di simile?

risposta

7

Quando si preme il tasto Tab per spostare lo stato attivo da una casella di testo modificabile ad un altro oggetto uicontrol, verrà invocato lo callback function della casella di testo modificabile. Quindi, dovresti solo inserire il codice per controllare il testo e avvisare l'utente di un problema nella funzione di callback del tuo testo modificabile uicontrol.

noti che the documentation stati che la richiamata per un UIControl anche essere invocato in queste altre condizioni:

  • clic su un altro componente, la barra dei menu, o lo sfondo della GUI.

  • Per una casella di testo modificabile a riga singola, premendo Immettere.

  • Per una casella di testo modificabile righe, premendo Ctrl + Enter.

Per esempio, ecco una semplice implementazione di callback che impostare il colore di sfondo del testo al valore di grigio di default se la stringa è o 'yes' o 'no', o rosso se la stringa è qualsiasi altra cosa:

function callback_fcn(hSource, eventData) 
    if ismember(get(hSource, 'String'), {'yes', 'no'}) 
    set(hSource, 'BackgroundColor', [0.941176 0.941176 0.941176]); 
    else 
    set(hSource, 'BackgroundColor', 'r'); 
    end 
end 
+0

lol, così spaventosamente semplice ... Finora ho pensato che la funzione di callback fosse invocata quando veniva premuto un pulsante di comando. Grazie mille! – niels