代码:
function send_Callback(hObject, eventdata, handles)
key = 3; %this is the variable
current = str2double(get(handles.value, 'String'));
%value is a textbox where user put input
newValue = key+current;
set(handles.listbox1,'String', newValue)
%listbox1 is a listbox to show the value
%Now I want to replace the value of key by the value of current
%key = current - something like this
我期待的是什么:我希望密钥将替换为当前值(例如8)。因此,当我再次在文本框中输入内容时(例如12),它将添加先前的当前值(例如8,然后newValue将为12 + 8)。
我得到了什么:每当我点击按钮时,每次都将键设置为3并添加当前值。但我希望钥匙永久更换,或者在首次使用后至少放在一边。
义务:当我启动程序并第一次单击“发送”按钮时,此处显示为3的键值必须精确为3。实际上我将在以后使用上述概念进行加密/解密[对于构建块我只使用一个添加],所以我的密钥第一次必须为设备所知,然后用户可以在需要时更改它
其他评论: My previous post几乎相似,但我对更新变量的要求仍未实现。目的是在那个时候服务。
答案 0 :(得分:0)
你需要一个全局变量。
在主脚本中,声明一个全局变量并为其指定3。
global key = 3;
在函数内部,首先告诉Matlab您正在使用全局变量键。然后根据需要进行修改。
function send_Callback(hObject, eventdata, handles)
global key; % Tell matlab to use the global varaible key instead of a new local variable.
current = str2double(get(handles.value, 'String'));
[newValue, key] = [key + current, current];
% Do something with the newValue here...
end
答案 1 :(得分:0)
如果您不想使用全局变量,请添加到GUI初始化函数:
handles.key = 3
guidata(hObject, handles)
然后在代码中使用handles.key
代替key
,确保在最终分配之后和函数返回之前调用guidata(hOjbect, handles)
。请参阅http://www.mathworks.com/help/matlab/ref/guidata.html,基本上设置了一个存储在handles
中的“变量”(实际上是handles
结构的字段,我相信),您必须致电guidata()
实际保存更改。这意味着你也在传递hObject
;我发现整个程序都是如此痛苦,我只是回归全局。