首页 > 代码库 > 在不同gui 中传递数据的完美解决方法

在不同gui 中传递数据的完美解决方法

刚刚自己遇到一个传递参数的问题,研究了一把,感觉效果还不错,贡献给论坛的兄弟们。

方法一:直接带参数传递,
   用途:用于主窗口打开一个子窗口时传递信息。

例子:主窗口(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);
               %顺便把主窗口的文本状态框也修改了。
     

在不同gui 中传递数据的完美解决方法