Frage

Ich weiß, dass dies wahrscheinlich ein einfaches Problem, aber ich bin neu in Matlab GUI und will im Grunde den alten Wert zu erhalten, die in dem Textfeld gespeichert werden verwendet, um den Wert zu ersetzen, die gerade eingegeben wurde. Z.

  1. Textfeld enthält eine gültige Zeichenfolge,
  2. Der Benutzer gibt ungültige Zeichenfolge,
  3. Rückruf func, validiert Eingang und realisiert neue Eingabe ist ein Fehler und kehrt zum alten vorherigen Wert.

Wie soll dies umgesetzt oder durchgeführt werden? Atm Ich verwende nur die get und set Eigenschaftswerte. Nachfolgend finden Sie einige Beispielcode:

function sampledist_Callback(hObject, eventdata, handles)
% hObject    handle to sampledist (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of sampledist as text
%        str2double(get(hObject,'String')) returns contents of sampledist as a double

input = str2double(get(hObject,'String'));
if(input < 0 || input > 500)
    errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
    set(handles.sampledist,'String',['10']); %<--- I would like this value 10 to be the previous entry!
    guidata(hObject,handles);
else
   set(handles.sampledist,'String',['',input]);
   guidata(hObject,handles);
end
War es hilfreich?

Lösung

Sie einfach ein neues Feld sampledistPrev auf Ihre Griffe Struktur hinzuzufügen.

In der openingFcn der GUI, definieren Sie die Eigenschaft mit einer Zeile wie folgt aus:

handles.sampledistPrev = 10; %# or whatever you choose as default value
%# if you want, you can set the default value to the GUI, so that you only need 
%# to change it at one point, if necessary, like so:
set(handles.sampledist,'String',num2str(handles.sampledistPrev));
%# don't forget to save the handles structure at the end of the openingFcn
guidata(hObject,handles)

Dann aktualisieren Sie Ihren Rückruf wie folgt aus:

function sampledist_Callback(hObject, eventdata, handles)
% hObject    handle to sampledist (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of sampledist as text
%        str2double(get(hObject,'String')) returns contents of sampledist as a double

input = str2double(get(hObject,'String'));
if(input < 0 || input > 500)
    errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
    set(handles.sampledist,'String',num2str(handles.sampledistPrev)); %reset value be the previous entry!
    guidata(hObject,handles); %# Note that you don't need to save the handles structure unless
                              %# you have changed a user-defined value like sampledistPrev
                              %# It may still be useful to do it so you always remember
else
   set(handles.sampledist,'String',['',input]);
   %# also update the reset value
   handles.sampledistPrev = input;
   guidata(hObject,handles);
end

Andere Tipps

Warum Sie nicht speichern „um den vorherigen Wert“ als ‚Userdata‘ des Objekts, wie folgt:


function sampledist_Callback(hObject, eventdata, handles)
    input = str2double(get(hObject,'String'));
    if (input < 0 || input > 500)
        errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
        val=get(hObject,'UserData');
        if isempty(val)
            val='';
        end
        set(hObject,'String',val); %<--- This is where you'd like to set the previous entry value!
        guidata(hObject,handles);
    else
        input=num2str(input);
        set(handles.sampledist,'String',input,'UserData',input);
        guidata(hObject,handles);
    end
end

% Y. T.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top