cc2005726 发表于 2010-8-24 11:39

GUIDE制作的界面之间的参数传递

   我用guide做了两个界面,分别称为A和B,A是主界面,在A上点击一个菜单上,跳出B界面。这一步我用的是run+B界面的M文件名实现的
现在在A界面中,导入一个MAT文件,进行一些计算,得到一些结果,这些结果保存在handles结构体中,比如,角度就保存在handles.angles结构体中,在A界面的各控件中用handles结构体来传递角度这个参数是没有问题的
   现在我要把角度 这个参数传到B界面中,    我曾试过在B界面中运行下面的语句:
    GUIhandle=A;%A 是A界面的m文件名
    Ahandles=guidata(GUIhandle);

我查看了下 Ahandles里面的一些东西,全是A界面上控件的句柄 ,没有用户后在添加到handles结构体中的那部分,如果我要把角度 这个参数传到B界面中,要怎么办啊?      

cc2005726 发表于 2010-8-24 16:43

本帖最后由 cc2005726 于 2010-8-24 16:46 编辑

我调了下,发现GUIhandle=A;这一句实际上是又生成了一个A界面,所以 Ahandles里面的全是A界面上控件的句柄 ,当然没有用户添加到handles结构体中的那部分。
但是在matlab自动生成的A.m文件一开始就有一段说明:
H =A returns the handle to a new CALED11ZHSH or the handle to
%      the existing singleton*.
也就是说在A界面已经存在的情况下,这一句是不应该重新生成A界面的,而是应该返回已经存在的A界面的句柄。我自己为了印证这句话,写了个小程序,附在后面了,证明是正确的。
我的程序里为什么会又生成一个A界面呢?

那么要如何传递已经存在的A界面中的数据到B界面中呢?


zhouyang664 发表于 2010-8-24 20:44

问一下,你附近给的文件不就可以实现吗?那好像是matlab—help中的例子,

zhouyang664 发表于 2010-8-24 20:52

首先你可以用figure的属性userdata,比如:在A窗口代码中,
set(figA,'userdata',handles.angles);%figA是界面A的Tag属性值;
然后在B窗口代码中,
handles.angles=get(figA,'userdata')%这样应该可以吧!
或者也可以用setappdata/getappdata
在A窗口代码中,setappdata(0,'name',handles.angles)%0表示屏幕,name随便取,
在B窗口代码中,value=getappdata(0,'name')%具体的你再查一下help-->setappdata,getappdata

cc2005726 发表于 2010-8-25 10:18

回复 zhouyang664 的帖子
这几种 方式我都试过的,在你的这一句中
handles.angles=get(figA,'userdata')%
意味着要知道figA的句柄,而figA句柄的得到是由下面这一句
GUIhandle=A;%A 是A界面的m文件名
问题就出在这一句中,在我的附件里,这一句运行后,如果当前没有A界面的存在,则产生一个A界面,若当前有A界面的存在,则返回已存在的A界面的句柄
本来应该是这样子的,但在我实际的程序里,运行这一句话,不管A界面是否已存在,都会重新再生成一个A界面,返回这个新产生A界面的句柄,我不知道这是怎么一回事?我要的是返回已存在的A界面的句柄 啊


   

zhouyang664 发表于 2010-8-25 10:43

回复 cc2005726 的帖子


    figA是界面A的Tag属性值;在设置界面的时候就存在了啊!

cc2005726 发表于 2010-8-25 15:50

回复 zhouyang664 的帖子
呵呵,此处的figA指的是A的句柄,不是指tag属性值(若是tag属性的话,我的程序在这一句会报错的),这个我已经确认过了


   
页: [1]
查看完整版本: GUIDE制作的界面之间的参数传递