こんにちは、あんこ先生です。
新規と修正でフォームの初期値を変更したくありませんか?
フォームはモードを切り替えるとできることが変わります。
なるべくひとつのフォームでまとめたいところですが、初期値を設定しようとすると難解になります。
なぜなら、いまどのモードで動いているのか調べ方がわかりにくいからです。
逆に考えると、それがわかればぜんぜん怖くないんです。
そこで、今回はフォーム初心者を対象に、フォームのモードを調べて初期値を設定する方法を紹介します。
もう迷わない!
フォームコントロールって何?という方は先にこちらの記事をオススメします。
フォームのモードを調べて初期値を調べる方法
Form.Modeとは│列挙型Enum
よくわかりませんが、複数の定数をひとつにまとめたものだそうです。
曜日情報などを返すCalendar関数みたいなものですね。
中身は3つあって、次の表のようになっています。
Edit | 0 |
New | 1 |
View | 2 |
並びは既定モードのプルダウンと同じですね。
つまり、EditモードならForm.Mode=0でTrueを返します。
Form.Mode=Editのように文字列では動作しません。
厳密にはNewのみ動作しますが、数値として比較した方がよいです。
一応変数にも格納できますが、その時点のモードのみ保持するため扱いにくいです。
フォームモード調査の具体例│Form.Mode
図を見ていただくともうそれが答えなんですが、下記式で判定できます。
フォーム名.Mode=1 //Newならtrue
フォーム名がfrmTestでEditモードか調べたい場合はこちらになります。
frmTest.Mode=0 //Editならtrue
やりかたさえわかればかんたんですよね。
では、これを用いてフォームに初期値を埋め込んでみましょう!
フォームに初期値を指定する
ロック解除しないと書き換えできないので忘れずに行っておきましょう。
初期値の設定│Newモード
おそらく初期値を設定したいのはこのNewモードだと思います。
すべてのカードはParent.Defaultになっているので、Newモードだと空になります。
一見問題なさそうですが、下図のようになりちょっと不便です。
テキスト入力 | 空 |
日付の選択 | 未選択 |
ドロップダウン | 最上段選択 |
例えば日報やアンケートみたいに当日行うものだと、わざわざ日付を選択しないといけませんよね。
ここの初期値をToday関数にするだけで、ユーザーの手間をひとつ減らせます。
//Newモードなら初期値は本日の日付
Switch(Form.Mode,0,Parent.Default,1,Today(),2,Parent.Default)
Switch関数でモードごとの初期値を設定してみました。
実質2択なのでIf関数でも構いません。
その場合、次のコードになります。
//Newモードなら初期値は本日の日付
If(Form.Mode=1,1,Today(),Parent.Default)
Newモードで初期値を設定するとユーザーが楽できるので喜ばれますよ。
初期値の設定│View・Editモード
ここはParent.Defaultのままでよいです。
Viewモードで、値を見せず入力済みか知らせたい場合は次のようにします。
//Viewモードで値を見せたくない場合
If(Form.Mode=2 && !IsBlank(Parent.Default),"入力済み",Parent.Default)
ViewモードかつParent.Defaultの中身があれば、入力済みを返します。
Parent.Defaultの中身がない、または他のモードの場合は規定値を返します。
フォームのモードを調べて初期値を設定する方法のまとめ
今回はフォームのモードを調べて初期値を設定する方法を紹介しました。
フォームがどのモードで動いているか調べる方法がわかれば、より一層使いやすくなりますね。
モードの比較は文字列ではなく数値で行うのがポイントです。
初期値を設定しまくって、より使いやすいフォームを作成してみてください。
コメントを残す