你好,
我正在创建一个JMP App,用于将数据收集到表中并以用户友好的方式可视化该数据。 作为该应用程序的一部分,我有一个MainWin模块,用户可以在其中花费大部分时间。 在该MainWin模块中,有一个UpdateGUI函数,该函数用于使用嵌入式数据表中的数据刷新UI(主要是汇总的表框)。
当用户想要添加数据时,他们启动另一个模块进行数据输入。 输入数据并按“确定”后,数据将添加到主表中。 我想关闭此模块以在MainWin模块中调用UpdateGUI函数。 我不记得是怎么写的,但是当第二个模块是模式窗口时,它就可以工作了。 现在,我将第二个模块更改为“对话”窗口,并且对UpdateGUI的调用不再起作用。
为了解决这个问题,我尝试了一些方法。
第一个错误是第二个模块不知道UpdateGUI函数(回想起来似乎很明显),但是当我使该名称全局可用时,从第二个模块调用它意味着该函数内对MainWin模块的所有引用都是也坏了..
我尝试的第二件事是在MainWin中添加一个while循环,该循环等待将变量设置为1,然后调用刷新。 从技术上讲,这是可行的,但是却导致了一些显着的下降……也许是因为我使用了Wait()函数。
您如何建议处理这种跨模块函数调用?
谢谢!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US">回复:JMP应用程序模块和命名空间</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US"><P>你好<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank">@mringqui</A> ,</P>
<P>我想对于您要尝试的工作我有解决方案。基本上,我认为您希望将对MainWin实例名称空间的引用的范围扩展到应用程序名称空间。为此,我在MainWin脚本中添加了以下行:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
我构建了一个简单的应用程序来说明。MainWin仅显示一个数字。UpdateWin允许您输入一个新数字,当您单击“关闭”时,该数字将更新MainWin中的显示。您可以看到我如何在Application名称空间脚本中定义内容,以使Update GUI表达式可在所有模块中使用。
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
该方法应概括为您要执行的操作。
@cwillden感谢您对此进行调查!
在应用程序名称空间中添加引用使该函数可以以一种比以前更干净的方式供UpdateWin使用,谢谢! 我肯定会在将来的情况下利用这一点。
不幸的是,从UpdateWin调用该函数仍然会将函数中的所有变量重新限定为UpdateWin。 我认为我了解到的是我需要清理名称空间。 可能需要一个名称默认为Here(1);扔在那里。
通过发送一个<<点击;到MainWin中的Refresh按钮。 这似乎可以确保所有范围都正确。
再次感谢您的帮助,您已将我设定在正确的方向