みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
yTakeといいます
基本的な事なのかもしれませんが、やり方がわかりません。
次の様な事を実現したいと思います。
あるフィールの選択値によって、別のフィールドの状態を有効、無効を切り替えたい。
有効とは通常の入力可能な状態で、無効とは、フィールドへの入力が出来ない状態で、ただし、そのフィールドはグレイ(灰色)表示などで入力不可と分かる状態です。
どこかのプロパティの設定値を変えるのでは?と思いますが、該当する設定が見当たりません。
或は、他に手法があるのでしょうか?
ご教授頂けると幸いです。
グレーにするのは条件付き書式で。
入力出来なくするのはそのフィールドにOnObjectEnterトリガを設定すると
出来ます。使用環境も書いてね。
Offline
旅人さん
ありがとうございました。
使用環境を示していなくてすみません。
ファイルメーカーPro Ver12
MacOS X ver10.6.8
です。
グレイ表示にするには条件付き書式を利用する点、分かりました。言われてみれば、そうですね。
また、他のフィールド値によって、そのフィールドへの入力を不可とする点ですが、
スクリプト・トリッガーの"OnObjectEnter"を設定するとありますが、
"OnObjectEnter"はそのフィールドへ入力動作が行われたら実行するスクリプトを定義すると思いますが、
記述すべきスクリプトが思いつきません。
イメージとしては、他のフィールド値によってそのフィールドの"OnObjectEnter"トリッガーの発生を抑制する/拒否すると言う感じですが、これは無理な様ですね。
"OnObjectEnter"トリッガー中で他のフィールド値を確認し所定の値以外であれば、そのフィールド値を無にする(空文字列("")を代入)としてみましたが、
うまく行きません。
多分、示唆されている事と違う事をしている様に思います。
もう少し、ヒントをもらえるでしょうか?
入力されたくないフィールドにOnObjectEnterを設定してスクリプトを
If 他のフィールド≠"所定の値"
フィールドへ移動[指定しない]
End If
とすると入れなくなります。
Offline
旅人さん
ありがとうございます。
なるほど、フィールドへ移動しないと言う手があるのですね。
早速試してみました。
が、しかし、スクリプトエディター上で、”フィールドへ移動”を設定しました。
特に、フィールドへ移動しないと言う設定自体は無さそうでしたので、"指定フィールドへ移動"のチェックボックスにチェックをしない事で実現されると思い、チェックをしていません。スクリプトエディター上では、フィールドへ移動の後の括弧([])内が空欄になった状態です。
これで、試すと、他のフィールド値が所定値以外であるにも関わらず、そのフィールドへ入力されてしまいます。
If [他のフィールド ≠ "所定値"]
フィールドへ移動[]
End If
この様になっています。フィールドへ移動の括弧内は空欄で良いのでしょうか?違いと言えば、ここくらいに思います。
お手数をお掛けします。
すみません、
追加情報です。
他のフィールド値によって入力を制限したいフィールドのタイプに原因がある様です。
どうも、フィールド自体への移動そのものはなされていない様子なので、タイプを変えてみました。
このフィールドはラジオボタンを採用していますが、ドロップダウンリストに変更してみたところ、確かに選択リストは表示されません。
ラジオボタンの場合、そのフィールドの項目上をクリックした時点で項目が選択されてしまいますが、フィールドへの移動自体はなされていません。
これは、仕様なのでしょうか?
フィールドのタイプによって動作が違うというのはバグにも思えます。
何か使用方法に誤りがあるでしょうか?
もし、ラジオボタンでは実現できない様であれば、他に実現方法はあるでしょうか?
よろしくお願い致します。
ラジオボタンは、その様な動きをするようです。仕様のようです。(不具合でしょうね)
厳格に運用するのでしたら、そのフィールドを、関連させた別テーブルで定義し、アクセス権セットでコントロールする、という方法が良いでしょう。
スクリプトで動かすのでしたら、フィールドへの移動を許可しておきます。OnObjectEnterのトリガーで、移動を禁止したい時には、元の値に戻した後にフィールドを終了させると良いはずです。
Offline
チェックボックスとラジオボタンでは本来目的が違いますが、どちらでも
いい(普通は?複数選択されない)ということですか。
また、条件となるフィールドが値一覧フィールドということですよね?
Offline
あるフィールド
別のフィールド
他のフィールド
と分かりにくくなっていますね。
こうします
Aフィールドの値が「あいう」の場合、
Bフィールド(ラジオボタン)の編集を不可にする。
スクリプトで
If(A="あいう")
元に戻す[元に戻す]
変数=B
元に戻す[再実行]
フィールド設定 ( B=変数 )
End If
このスクリプトをBの
OnObjectModify
で実行させます。
これで編集できてないように見えますね。
Offline
Shinさん、旅人さん、チポさん、ありがとうございます。
すみません、昼間はアクセス出来ませんでした。
"OnObjectEnter"でスクリプトを、
変数を設定 (フィールド値を変数へ退避)
IF(条件が合致しない時)
フィールドへ移動[]
フィールド設定 (変数へ退避させていた値をフィールドへ戻す)
EndIf
としてみましたが、入力されてしまいます。
なお、制御されるフィールドは、複数選択を許可しないのでラジオボタンを想定しています。チェックボックスを想定した事はありません。
また、条件となるフィールドは値一覧です。
"OnObjectModify"で試してみました。
ご呈示頂いた通りにスクリプトしてみました。取り敢えず、期待通りの動作しています。全くOKですが、
スクリプト自体は理解出来ていません。"OnbjectEnter"の場合の方が考え方としては分かり易いです。(スクリプトは期待通りとは行きませんでしたが)
If(A="あいう")
元に戻す[元に戻す]
変数=B
元に戻す[再実行]
フィールド設定 ( B=変数 )
End If
とありますが、元に戻すを2回実行していますが、なぜでしょう。
ラジオボタンの場合、選択がなされてしまうのでそれをキャンセルする為、という事でしょうか?
その後、変数に値を退避させて、、、フィールド値を退避から戻すと考えますが、2番目の元に戻す[再実行]がよくわかりません。
動作としては、実現出来る様になりました。みなさん、大変ありがとうございました。
ごめんなさい、訂正です
スクリプトは
If(A="あいう")
元に戻す[元に戻す]
End If
これだけで十分ですね。
以前、他のケースで使った記憶のままに書いてしまいました。
今回の場合はこれで大丈夫ですね。
スクリプトトリガ
OnObjectModify
のヘルプ
http://www.filemaker.com/12help/jp/html … html#16482
スクリプトステップ
元に戻す
のヘルプ
http://www.filemaker.com/12help/jp/html … html#60935
これらを調べてみてください。
Offline
チポさんはじめ皆様ありがとうございました。
”元に戻す”の件は了解しました。
やはり、シンプルに一つで良いのですね。
何か深い意味があるのかと思って思わず質問してしまいました。
ありがとうございました。
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 589.02 KiB (Peak: 605.92 KiB) ]