Matlab GUI重用功能块

时间:2012-12-18 13:25:33

标签: function matlab matlab-guide

我在GUIDE中制作了一个带有两个可编辑文本框和四个静态文本框的Matlab GUI 用户在两个可编辑的文本框(e1e2)中输入值,并根据这些值计算应在静态文本框中显示的值(s1,{{ 1}},s2s3)。

它会在s4e1

的每次值更改时执行此操作

e2更改值时计算值的代码如下所示。

e1

是否可以引用此代码块(包含在BLOCK中),以便% --- Executes on key press with focus on e1 and none of its controls. function e1_KeyPressFcn(hObject, eventdata, handles) % hObject handle to e1 (see GCBO) % eventdata structure with the following fields (see UICONTROL) % Key: name of the key that was pressed, in lower case % Character: character interpretation of the key(s) that was pressed % Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed % handles structure with handles and user data (see GUIDATA) % Start of BLOCK % Get values from e1 and e2 and calculate other values handles.levels = str2num(get(handles.e1, 'String')); handles.edgelength = str2num(get(handles.e2, 'String')); handles.cellnum = (handles.levels^3 + 3*handles.levels^2 + 2*handles.levels)/6; handles.vertnum = ((handles.levels+1)^3 + 3*(handles.levels+1)^2 + 2*(handles.levels+1))/6; % Set values of s1, s2, s3 and s4 set(handles.s1, 'String', num2str(handles.cellnum)); set(handles.s2, 'String', num2str(handles.vertnum)); set(handles.s3, 'String', num2str(0.433*handles.edgelength^2)); set(handles.s4, 'String', ... num2str(2*handles.cellnum*str2num(get(handles.s3, 'String')))); % End of BLOCK 也可以使用它? 现在我只是将该部分粘贴到function e2_KeyPressFcn,但这似乎不太优雅。

1 个答案:

答案 0 :(得分:2)

如何为您的代码块创建帮助函数?

我正在思考这些问题:

function e1_KeyPressFcn(hObject, eventdata, handles)
    handles = helper_block_func(handles);

function e2_KeyPressFcn(hObject, eventdata, handles)
    handles = helper_block_func(handles);

function hout = helper_block_func(hin)
    hout = hin;

    % # Get values from e1 and e2 and calculate other values
    hout.levels = str2num(get(hout.e1, 'String'));
    hout.edgelength = str2num(get(hout.e2, 'String'));
    hout.cellnum = (hout.levels ^ 3 + 3 * hout.levels ^ 2 + 2 * hout.levels) / 6;
    hout.vertnum = ((hout.levels + 1) ^ 3 + 3 * (hout.levels + 1) ^ 2 ...
        + 2 * (hout.levels + 1)) / 6

    % # Set values of s1, s2, s3 and s4
    set(hout.s1, 'String', num2str(hout.cellnum));
    set(hout.s2, 'String', num2str(hout.vertnum));
    set(hout.s3, 'String', num2str(0.433 * hout.edgelength ^ 2));
    set(hout.s4, 'String', ...
        num2str(2 * hout.cellnum * str2num(get(hout.s3, 'String'))));