Matlab 如何限制findobj只在当前创建的gui中查找对象?

Matlab 如何限制findobj只在当前创建的gui中查找对象?,matlab,Matlab,我有两个图形用户界面,它们是彼此的精确副本 但是,每个gui中只使用了部分功能。我基本上在GUIDE中以两个不同的名称保存了一个单片gui 我将整块分割成子GUI,每个都有相同的fig文件,但用不同的名称保存在GUIDE中 SubguiA和subguiB是从父gui上的两个按钮启动的。在每个子GUI中都有一个usercontrol(一个面板),它的“UserData”设置为3005。我从button2运行subguiB,并介入并从subguiB上其中一个文本框的CreateFcn中请求hpane

我有两个图形用户界面,它们是彼此的精确副本

但是,每个gui中只使用了部分功能。我基本上在GUIDE中以两个不同的名称保存了一个单片gui

我将整块分割成子GUI,每个都有相同的fig文件,但用不同的名称保存在GUIDE中

SubguiA和subguiB是从父gui上的两个按钮启动的。在每个子GUI中都有一个usercontrol(一个面板),它的“UserData”设置为3005。我从button2运行subguiB,并介入并从subguiB上其中一个文本框的CreateFcn中请求hpanel=findobj('UserData',3005)。我将hpanel恢复为2x1 double,因为它在内存中找到了两个这样的面板。我明白了

因此,当我使用hpanel作为“父对象”设置文本框的userdata时,应用程序崩溃,因为hpanel应该是1x1。我想我会在findobj中使用subguiB的句柄,因此这是专门将findobj限制为subguiB的。但是,当运行子GUI上文本框的CreateFcn时,它还没有整个子GUI的hObject。整个subguiB的hObject可以从subguiB的OpeningFcn获得,它仅在其上所有usercontrols的createfcn执行之后运行

所以问题是:如何限制findObj只在subguiB(当前正在创建的)中查找对象。 谢谢

尝试其他功能:

findall(handle_list,'property','value',...)
在这里,您可以使用句柄作为要搜索具有属性的对象的父对象。。。但你还是要确保找到正确的对象。也许给一个唯一的名字会有帮助

尝试其他功能:

findall(handle_list,'property','value',...)

在这里,您可以使用句柄作为要搜索具有属性的对象的父对象。。。但你还是要确保找到正确的对象。也许给一个唯一的名字会有帮助

您可以尝试另一种共享资源的方法,以避免出现此问题。在Mathworks文件交换站点中,有一个名为Singleton()的面向对象类,您可以使用它来构建自定义子类,以允许交换重要信息并抽象GUI界面细节

单例的要点是保证任何程序中只有一个,因此可以在该对象中存储状态信息,并且可以从任何地方访问它。不需要搜索


当每个GUI调用其CreateFcn时,它会获取您创建的singleton子类的实例句柄,并设置GUI[A,B]窗口句柄属性,以便其他GUI可以通过该singleton直接访问它。然后,您可以构建一个消息传递系统来跨GUI交换或复制值,或者将高级协调功能协调到整个应用程序中。对于应用程序的不同部分需要通信的任何功能来说,这都是一个很好的范例,例如允许外部Matlab脚本与GUI交互以进行批处理。例如,一个GUI按钮回调可以调用singleton对象中的一个方法,使第二个GUI弹出并显示,然后使用刚刚输入的第一个GUI中的所有最新数据上下文填充该GUI,而第一个GUI甚至不知道第二个GUI的内部情况。如果GUI的控件发生更改,则只有singleton需要知道这些更改的内部内容

您可以尝试另一种共享资源的方法,以避免出现此问题。在Mathworks文件交换站点中,有一个名为Singleton()的面向对象类,您可以使用它来构建自定义子类,以允许交换重要信息并抽象GUI界面细节

单例的要点是保证任何程序中只有一个,因此可以在该对象中存储状态信息,并且可以从任何地方访问它。不需要搜索


当每个GUI调用其CreateFcn时,它会获取您创建的singleton子类的实例句柄,并设置GUI[A,B]窗口句柄属性,以便其他GUI可以通过该singleton直接访问它。然后,您可以构建一个消息传递系统来跨GUI交换或复制值,或者将高级协调功能协调到整个应用程序中。对于应用程序的不同部分需要通信的任何功能来说,这都是一个很好的范例,例如允许外部Matlab脚本与GUI交互以进行批处理。例如,一个GUI按钮回调可以调用singleton对象中的一个方法,使第二个GUI弹出并显示,然后使用刚刚输入的第一个GUI中的所有最新数据上下文填充该GUI,而第一个GUI甚至不知道第二个GUI的内部情况。如果GUI的控件发生更改,则只有singleton需要知道这些更改的内部内容

这很有趣,史蒂夫!谢谢你的帮助。这很有趣,史蒂夫!谢谢你的帮助。