2012-03-22 10 views
5

To jest moja pierwsza próba stworzenia GUI w MATLAB. Nie byłem w stanie znaleźć sposobu wykrycia przesunięcia fokusu z tekstu do innego obiektu. Potrzebuję takiej funkcjonalności, abym mógł przetestować "na miejscu" dane wejściowe użytkownika i zmienić kolor tła edycji tekstu na czerwony, jeśli dane wejściowe zostaną utworzone w nieprawidłowy sposób.Jak wykryć utratę ostrości z obiektu edycji tekstu?

Innymi słowy, byłoby bardzo wygodne, aby użytkownik końcowy mógł zapisać swoje wyrażenie w edycji tekstu, a następnie nacisnąć klawisz tab, aby przejść do kolejnej edycji tekstu, a jednocześnie zobaczyć czerwone tło w pierwszej edycji tekstu w przypadku jakiegoś problemu z danymi wejściowymi.

Mam na myśli kilka alternatyw, aby sprawdzić dane wejściowe użytkownika, ale nie są one tak wygodne, jak powyżej. Jak mogę zaimplementować coś takiego?

Odpowiedz

7

Po naciśnięciu przycisku, aby przenieść fokus z edytowalnego pola tekstowego na inny obiekt uicontrol, zostanie wywołany callback function edytowalnego pola tekstowego. W związku z tym wystarczy umieścić kod sprawdzający tekst i powiadomić użytkownika o problemie w funkcji zwrotnej edytowalnego tekstu.

Zauważ, że the documentation stwierdza, że ​​zwrotna dla uicontrol będą również przywołane w tych innych warunków:

  • Kliknięcie inny komponent, pasek menu lub tło GUI.

  • Aby edytować pole tekstowe z pojedynczym wierszem, naciśnij Wpisz.

  • Na polu tekstowym wielowierszowego edycji, naciskając Ctrl + Wprowadź.

Na przykład, tutaj jest bardzo prosta implementacja wywołania zwrotnego, który będzie ustawić kolor tła tekstu do domyślnej wartości szarej jeśli ciąg jest albo 'yes' lub 'no' lub czerwono, jeśli ciąg jest coś innego:

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, tak cholernie proste ... Do tej pory myślałem, że funkcja wywołania zwrotnego została wywołana po naciśnięciu przycisku polecenia. Dziękuję Ci bardzo! – niels

Powiązane problemy