Errore con uicontrol edit aiuto

di il
1 risposte

Errore con uicontrol edit aiuto

Ciao

Ho creato una serie di caselle in cui inserire dei valori tramite la funzione uicontrol come questa:
S=uicontrol('Style','edit',...
    'Position',[180 570 120 20],...
    'String','kVA');
Poi assegno il valore alla stessa variabile S e lo trasformo da stringa a valore numerico:
S = get(S,'String');
S = str2num(S);
Questa ultima operazione la richiamo con un pulsante che esegue l'operazione per più caselle su più variabili diverse.

Il problema si presenta quando vado a modificare il valore di una cella, per esempio S, ed effettuo una nuova assegnazione su S tramite la funzione get.
Alla riga della funzione get matlab si ferma e mi da il seguente errore:

??? Error using ==> get
Invalid handle object.

Error in ==> Aggiornamento at 4
S = get(S,'String');

??? Error while evaluating uicontrol Callback

Non riesco proprio a capire perché non mi lascia scriverci sopra tramite una nuova funzione get. Ho provato anche a riportare il valore in stringa prima di get ma nulla da fare.
L'unico modo e ricreare la piccola casella di testo con un nuovo uicontrol ma avendo altre caselle significa che per cambiarne una le dovrei poi digitare nuovamente tutte. Son molti valori e vorrei poter modificare un solo valore tenendo invariati gli atri.

Grazie

Ciao

1 Risposte

  • Re: Errore con uicontrol edit aiuto

    Lo script contiene un errore:

    [*] la variabile S viene inizialmente utilizzata coma handler dello uicontrol (istruzione "S=uicontrol('Style','edit' ...")
    [*] successivamente viene usata per memorizzare la stringa letta dalla EditBox (istruzione S = get(S,'String');
    [*] da questo momento, la variabile "S" non può contiene più l'handler dello uicontrol e quindi non potrà più essere utilizzata per accedere ad esso

    Nello script in calce, vengono proposti 3 esempi di accesso in "lettura / scrittura" alla EditBox
    
    
    %
    % Creazione di una "figura"
    %
    figure
    %
    % Creazione di tre EDIT BOX
    %
    S(1)=uicontrol('Style','edit',...
       'unit','normalized', ...
       'Position',[.1 .1 .1 .1],...
       'String','kVA_1');
    S(2)=uicontrol('Style','edit',...
       'unit','normalized', ...
       'Position',[.1 .2 .1 .1],...
       'String','kVA_2');
    S(3)=uicontrol('Style','edit',...
       'unit','normalized', ...
       'Position',[.1 .3 .1 .1],...
       'String','kVA_3');
    %
    % Esempio 1: accesso alle EDIT BOX per cancellarne il contenuto
    % (l'istruzione "pause" serve solo per ... dare il tempo di "vedere cosa
    % succede)
    %
    for i=1:3
       set(S(i),'string','');
       pause(1)
    end
    %
    % Esempio 2: settaggio di un valore in ognuna delle EDIT BOX
    % (l'istruzione "pause" serve solo per ... dare il tempo di "vedere cosa
    % succede)
    %
    for i=1:3
       val=rand(1,1);
       str=num2str(val);
       set(S(i),'String',val)
       pause(1)
    end
    %
    % Esempio 3: lettura della stringa da ognuna delle EDIT BOX, conversione
    % della string in numero, "manipolazione del numero (il numero viene
    % moltiplicato per 2)
    %
    for i=1:3
       str=get(S(i),'string');
       val=str2num(str);
       val=val*2;
       f = warndlg(['Il doppio del valore letto dalla EditBox ' ...
          num2str(i) ' è ' num2str(val)], 'Lettura EditBox');
       waitfor(f);
    end
    
    
    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
1 risposte