こんにちは、
データをテーブルに収集し、そのデータをユーザーフレンドリーな方法で視覚化するためのJMPアプリの作成に取り組んでいます。 そのアプリの一部として、ユーザーがほとんどの時間を費やすMainWinモジュールがあります。 そのMainWinモジュール内には、埋め込みデータテーブルのデータでUI(主に要約されたテーブルボックス)を更新するために使用されるUpdateGUI関数があります。
ユーザーがデータを追加する場合、データ入力用の2番目のモジュールを起動します。 データを入力して「OK」を押すと、データがメインテーブルに追加されます。 このモジュールを閉じて、MainWinモジュールのUpdateGUI関数を呼び出します。 どのように書いたかは覚えていませんが、2番目のモジュールがモーダルウィンドウである場合に機能していました。 2つ目のモジュールをダイアログウィンドウに変更しました。UpdateGUIの呼び出しが機能しなくなりました。
これを修正するために、私はいくつかのことを試みました。
最初のエラーは、UpdateGUI関数が2番目のモジュールに認識されていないことです(振り返ってみると明らかなようです)、名前をグローバルに使用できるようにすると、2番目のモジュールからそれを呼び出すと、関数内のMainWinモジュールへのすべての参照がまた壊れた。
2つ目は、MainWinにwhileループを追加して、変数が1に設定されるのを待ってから、更新を呼び出すことでした。 これは技術的には機能しましたが、いくつかの大幅な速度低下を引き起こしました...おそらく私がWait()関数を使用したためです。
この種のクロスモジュール関数呼び出しをどのように処理することをお勧めしますか?
ありがとうございました!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US">Re: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の表示を更新する新しい数値を入力できます。すべてのモジュールで更新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にある[更新]ボタンをクリックします。 これにより、すべてのスコープが正しく維持されるようになります。
助けてくれてありがとう、あなたは私を正しい方向に導きました