テーブルコントロールの初期化方法
皆様
立て続けの投稿失礼いたします。
Magic XPA 4.6にて、フォーム上にテーブルコントロールを配置しています。
「カラムの並び替え可」と「サイズ変更可」をTrueにしています。
ここで、カラムの並びと幅をデフォルト値に戻す処理を行いたいのですが、どのようにすれば良いのかご存じの方がいらっしゃいましたら、お知恵をおかしいただければ幸いです。
宜しくお願いいたします。
-
画面を開きなおさずにということであれば難しいのではないでしょうか
開きなおしてもいいならFormStateClearとか
フォーム状態の維持のプロパティとかで対応できるとおもいますが・・・ -
Sun nihara様
ご返事ありがとうございました。
各社員が好きな順番や列幅で調整して使用しており、調整後の情報は保持されています。
初期化ボタンを押した場合は、開きなおすのは構いません。
教えていただいたFormStateClearを調べてみます。
貴重なお時間を割いて、ご協力いただき、ありがとうございました。
-
だいずさん、
任意のタイミングで明示的に初期化するなら、FormStateClear() 関数が使えます。これに対して、毎回、タスク起動のたびに初期化でいいのなら、フォーム特性の「フォーム状態の維持」を「No」にしてやればいいです。
フォーム状態の維持はバージョン管理もできて、便利ですよ。
詳細は、下記の連載コーナーでも解説していますので、よろしければお越しください。
第206回 フォーム状態の維持と維持バージョン(2025年4月30日) -
Tanda様
返信遅れて申し訳ございません。またご教授いただきありがとうございました。
FormStateClearを使ってみたところ、カラムの幅や順番が元に戻る動きにはなりませんでした。
論理型の変数の「項目更新」処理の「値」欄で「FormStateClear('*')」や「FormStateClear('')」としたのですが、うまく初期化されません。
ソースを見て回ったところ、違う機能として存在していたボタンでカラムの幅と順番が元に戻る処理を見つけたので(その処理ではFormStateClearを使わずに、ゴリゴリと再計算させてます)それを流用することにします。
貴重なお時間を割いてご協力いただき、ありがとうございました。
-
だいずさん、
パラメータは、FormStateClear('') ではなく、FormStateClear(' ') ですよ。
-
Tanda様
ご指摘ありがとうございます。半角スペースが必要だったのですね。
早速試しみましたが、残念ながら初期化できませんでした。
タスクの構成は下記のようになっています。
・親タスクでForm全体とForm上部にボタン類を生成
・子タスクで、親タスクが生成したFormの下部にテーブル構造を生成
親タスクにForm初期化のボタンを新たに用意してFormStateClear(' ')とFormStateClear('*')を実行してみましたが、どちらでもFormが初期化できない状態です。
-
使い方が大正解なのかはわかりませんが、自分は以下のように使っています。

-
自分は全ての画面フォームをリセットする目的で、メインメニュー等から
アクション FormStateClear('*') を発行できるようお使い頂いております。 -
他のプログラムではゴリゴリと再計算していると書いてらっしゃったので
何か種も仕掛けもない.netとかで直接magicのテーブルを読み込み、操作していたりするのでしょうか?
後学のために差しさわりのない範囲でご教示いただけないかと思っておりますー
よくリクエストはもらうんですが無理っすねーて断ってるので・・・ -
nkmt様
ご返事ありがとうございます。同じようにアクションで試してみましたが、やはり初期化できませんでした。
私もよく分かっていないのですが、プログラムの構造上の問題なのかと思っております。
Sun nihara様
ご返事ありがとうございます。
.netは使用していないと思います。Magic自体に不慣れなので、ソースを見てもイマイチ何をしているのか分からないのですが、formを生成する処理を最初から行っているように思います。
-
Sun niharaさん、
上にも書きましたが、フォーム特性の「フォーム状態の維持」を「No」にしてやれば、フォーム変更はその場限りで、あとは一切、記憶されなくなりますよ。
フォームを毎回りセットしたいのでしたら、これが一番簡単ですよ。
だいずさん、
プログラム修正前に維持されていたフォームが、ゴミデータとして残っているのかもしれませんね。
-
だいずさん、
お返事ありがとうございます、フォームを生成していそうなんですか・・
magicのテーブルじゃないんでしょうかね、.net のDatatableコントロール貼ってるとかだと
そのプロパティを変えればよいかとは思いますが、
ちょっとMAGICだけだとどうやってるか想像つきませんねー!
Tandaさん
ご教示ありがとうございます、フォーム状態の維持は存じておりまして
リセットというよりはマウスで動かした列の幅によって、2段にしたりと
行の高さを変えるとかそういう感じのリクエストですね
根本的にテーブルコントロールの列の幅ってとる方法がほぼなくて
コントロール貼って、幅とってとか何とかすればいけるかもしれないけども
さすがにめんどうというところであります -
Sun nihara様
気が付いたのですが、MagicEnterpriseStudio上のデバッグモード(?)で動かすと、あるボタンでフォームが初期化できるのですが、それをecfに出力して実行すると、そのボタンで初期化できません。
同じソースなのにStudioとecfとで動きが異なる状況です。
Magicのマニュアルに下記のファイルを削除しても初期化できるとありますが、ファイルを削除しても初期化できませんでした。私の使用方法として、1台のサーバー上のMgxpaRuntime.exeをクライアントPCから呼び出して使用している影響かもしれませんが、かといってサーバー側の該当のフォルダに全社員分のデータがあるようにも見えません。
C:\Users\<user>\AppData\Roaming\MSE\<APP GUI ID>
-
ご協力いただいた皆様
フォームの初期化ができました。
以下2点が必要だったようです。
1.FormStateClear('')実行後にイベント実行で「ビュー再表示」を行う
2.MagicEnterpriseStudioのデバッグモードでは正常に動作しないので、ECFを出力し、ECF経由でプログラム実行

ちなみに、タスクは下記の構成になっていますが、親タスクにFormStateClearを入れました。
・親タスクでForm全体とForm上部にボタン類を生成
・子タスクで、親タスクが生成したFormの下部にテーブル構造を生成
皆様ご協力ありがとうございました。
-
Sun niharaさん、
フォームのレイアウトは結構いちばん手間と時間がかかりますね。同情いたします。
-
だいずさん
ecfでなければFormStateClearが効かない事は体感しており投稿しないといけないと思ったけど投稿しずまいでした。
ヘルプを見てもそれを把握出来ない気がしました。
メインイベントにスコープ=サブツリーで「FormStateClear('')、ビュー再表示」の手法は大変参考になりました。
ありがとうございます。 -
nkmt様
こちらこそありがとうございました。
EnterpriseStudioとECFとで動作が違うのはなんとかならないかと思います。
今もフォームを直しているのですが、EnterpriseStudioでは動作するのに、ECFにすると異常終了するようになってしまいました。
-
だいずさん、
反対ですよ。「フォーム状態の維持」は開発版では効きません。実行版にデプロイしてはじめて有効になります。
-
Tanda様
ご返事ありがとうございます。
>反対ですよ。「フォーム状態の維持」は開発版では効きません。
そうなんですね。開発版と実行版の違いがちょこちょこありそうなので、頻繁に実行版でテストが必要なんですね。
-
だいずさん、
というか、これが開発版で効いてしまったら、F7で実行するたびにフォームが異なるという現象が起こり得てしまい、どのフォームがオリジナルだったのか、分からなくなってしまうからです。
-
Tanda様
直接F7で今回のフォーム画面を呼び出した場合は納得できるのですが、
下記の手順でも開発版だとカラムの状態が保持されませんでした。
1.メインメニュー画面をF7で呼び出す
2.今回のフォームがあるタスクに遷移
3.カラムの並び替えを実行してフォームを閉じる
4.メインメニューからもう一度今回のフォームがあるタスクに遷移
開発版を起動する際に、Magic.iniを使用しておらず、ターミナル番号も割り当てていないので、フォーム状態を保存するための情報が不足しているからなのかと思っております。
-
お邪魔します。
だいず様
INIやターミナル番号とFormStateClearとの関連はわかりませんが、
私は開発版の起動アイコンショートカットには、 /INI=そのシステムの開発用.INI
といった指定をしております。
開発版と実行版の動作の違いはFormStateClearを除いて他にはあまり感じないので
開発版でテストOKならecfを作って客先リリースしています。 -
nkmt様
コメントありがとうございます。
開発版と実行版はあまり違いないのですね。それを聞いて安心しました。
-
ヘルプ引用です。
Home > Magic xpa 逆引き辞典 > ウィンドウインタフェース > エンドユーザがカスタマイズしたフォーム状態を保持するには
⇒この機能は、開発エンジンで実行している場合は無効です関連プログラム:オンライン/リッチクライアントサンプル(プログラム WI01/RWI01)
サンプル触っただけなので特に何もしてませんが動作結果だけ。
開発エンジンでRW01をF7実行⇒無効
開発エンジンでRW01をメニューから呼出実行⇒無効
ビルドしてメニューから呼出実行⇒有効でしたので、ヘルプの通りなのかと思います。
-
だいずさん、
メインメニューからでも同じことですよ。デバッグ実行しているうちに、どれがオリジナルだったか分からなくなってしまいますから。
-
スレ主ではありませんがマグル様ありがとうございます。
> ⇒この機能は、開発エンジンで実行している場合は無効です
私は以下を見ておりました。
-
マグル様
Tanda様
ご返事ありがとうございました。
たしかに「Home > Magic xpa 逆引き辞典 > ウィンドウインタフェース > エンドユーザがカスタマイズしたフォーム状態を保持するには」に書いてありますね。いろいろなマニュアルを見て回らないといけないということですね。
サインインしてコメントを残してください。
コメント
27件のコメント