回 帖 发 新 帖 刷新版面

主题:两界面按钮互控问题

我问过这样的问题,大虾们给我的解释是使用句柄,我试着去做了,而且定义了一个全局句柄也不行

我的程序是这样的:用了好多方法和途径,主要有以下两种:

1、第一个途径:

1)在第一个figure文件(figure1)的OutputFcn函数中定义了:

global gHBtnSet;                                                            % “参数设置”按钮句柄的全局变量
gHBtnSet = handles.pBtnSet;

执行效果:正常通过,并且执行到。

2)然后在figure1文件中的“参数设置”按钮的回调函数中,调用如下程序:

Set(gHBtnSet, 'Enable', 'off');

执行效果:“参数设置”按钮变为不激活状态。

3)然后在另一个figure文件(figure2)的“确定”按钮回调函数中调用如下程序:

% 将参数设置和导入数据按钮置于激活状态。
Set(gHBtnSet, 'Enable', 'on');
执行效果:报错,如下:

??? Error using ==> SetDlgMain('pBtnOk_Callback',gcbo,[],guidata(gcbo))
Undefined function or variable 'gHBtnSet'.

失败了...

2、第二个途径
1)、2)步骤不变
3)我在第二个figure文件(figure2)的OutputFcn函数中也定义了:

global gHBtnSet;                                                            % “参数设置”按钮句柄的全局变量
gHBtnSet = handles.pBtnSet;

同时,在figure2的“确定”按钮回调函数中调用如下程序:

% 将参数设置和导入数据按钮置于激活状态。
Set(gHBtnSet, 'Enable', 'on');

执行效果:

执行1)过程时,效果与1途径相同。

执行2)过程时,出错,如下:

??? Error using ==> Main('pBtnSet_Callback',gcbo,[],guidata(gcbo))
Reference to non-existent field 'pBtnSet'.

??? Error while evaluating uicontrol Callback

执行3)过程时,自然和1途径一样了,出现与1途径同样的错误。

各位大虾我知道肯定是我做的程序不对,我把我这个详细的过程贴出来,只想能求得大虾们的详细答案,即使你们认为这个问题很简单,也希望能帮帮我这个菜鸟。试了好多途径也行不通,请各位帮帮忙。

回复列表 (共1个回复)

沙发

其实一个figure中按钮,控制另一个figure中的按钮是很简单的。举例说明,
现在我们有两个figure,一个figure的tag属性为test1,其上一个按钮的tag属性为pbtn_test1
另一个figure的tag属性为test2,其上一个按钮为tag属性为pbtn_test2,下面我们来让当我们单击第一个figure中的按钮时,另一个figure上的按钮的string改变的程序
第一个figure中的主要程序如下:
function test1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to test1 (see VARARGIN)

% Choose default command line output for test1
handles.output = hObject;
test2('Name','Test 2!');
% Update handles structure
guidata(hObject, handles);

function pbtn_test1_Callback(hObject, eventdata, handles)
% hObject    handle to pbtn_test1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
htest2=guihandles(findobj('Tag','test2'));
set(htest2.pbtn_test2,'String','Test1 button control');
第二个figure的主要程序如下:
function pbtn_test2_Callback(hObject, eventdata, handles)
% hObject    handle to pbtn_test2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
htest1=guihandles(findobj('Tag','test1'));
set(htest1.pbtn_test1,'String','Test2 button control');

看出来吧!其实只要通过guihandles来获得另一个figure的句柄,然后在另一个figure中就像在自己中引用那个按钮就行了。如果需要演示程序的话,请到我的google论坛下载pengjuntest00.rar  

我来回复

您尚未登录,请登录后再回复。点此登录或注册