刚刚自己遇到一个传递参数的问题,研究了一把,感觉效果还不错,贡献给论坛的兄弟们。
方法一:直接带参数传递,
用途:用于主窗口打开一个子窗口时传递信息。
例子:主窗口(main) 中点击按钮后打开一个新窗口(ShowSQL)显示当前的sql 语句
主窗口代码(main):
ShowSQL({sqlstr},{‘SQL Statement‘});
子窗口代码(ShowSQL):
function ShowSQL_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.str = varargin{1}; % <-- 就是{sqlstr}
handles.title = varargin{2}; % <--就是{‘SQL Statement‘}
方法二:任意窗口间的参数传递,
用途:如果子窗口也想回传一些参数给主窗口,或者修改主窗口的一些参数,需要利用hObject 和handles 的传递来达成目标
例子:主窗口(main)打开一个子窗口(config)允许选择当前的使用的数据库连接
主窗口代码(main):
主窗口原有的一个handles.conn 保存数据库连接配置。
希望通过子窗口来设置选择不同的数据库
function setup_uipushtool_ClickedCallback(hObject, eventdata, handles)
config(hObject,handles);
子窗口代码(config):
function config_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
handles.obj = varargin{1}; %获得对象指针
hdl = varargin{2};
handles.handle = hdl; %获得句柄列表
% Update handles structure
guidata(hObject, handles);
function uipanel1_SelectionChangeFcn(hObject, eventdata, handles)
switch get(hObject,‘Tag‘) % Get Tag of selected object
case ‘db1_radio‘
handles.handle.conn = database(‘db1‘,‘‘,‘‘); %修改主窗口的数据库配置参数
case ‘db2_radio‘
handles.handle.conn = database(‘db2‘,‘‘,‘‘);
case ‘db3_radio‘
handles.handle.conn = database(‘db3‘,‘‘,‘‘);
otherwise
end
guidata(handles.obj, handles.handle); %保存修改,很重要,否则修改就不成功了
set(handles.handle.status_text,‘String‘,handles.handle.conn.Instance);
%顺便把主窗口的文本状态框也修改了。