イベント初心者講座 その3 または The Compleat Angler For Kiri 桐V8の釣魚大全

「かっこう」掲示板の投稿記事から、主に藤野さんとONnojiの問答集を作りました。何か役に立つ話が見つかるカモ?

トップページに戻る あらすじ その1 その2 その3 その4 その5 その6 その7 その8 その9

フォームの表示の件 - 藤野 2002年02月06日 19時33分
Re:フォームの表示の件 - ONnoji 2002年02月06日 22時36分
見事成功です・・・ - 藤野 2002年02月06日 23時42分
エラー処理に行く前に質問です - 藤野 2002年02月07日 20時29分
Re:エラー処理に行く前に質問です - ONnoji 2002年02月07日 21時48分
<往復型>を試して見ることをお勧めします。 - ONnoji 2002年02月07日 21時53分
モーダルフォームためしました - 藤野 2002年02月08日 20時17分
Re:モーダルフォームためしました - ONnoji 2002年02月08日 21時10分
エラー処理の考え方は? - 藤野 2002年02月07日 20時45分
Re:エラー処理は最後の最後の最後 - ONnoji 2002年02月07日 21時57分
またあせりました m(__)m - 藤野 2002年02月07日 22時58分

フォームの表示の件 - 藤野 2002年02月06日 19時33分

何とかここまで、きました、ますます面白くなってきました。
ところで。
&mBiginingと&mEndの欄ですが、スペースきーを押さないと
入力モードになりません。
 ここは入力前イベントですか
 そうすると入力後イベントでエラー処理が出来そうな
気がしますが、
たとえば
入力前  &mBigining=""
入力後  if (&mBigining="")
       &msg="何も入力されていませんもう一度入力してください"
        確認 &msg
      else
&msg="続いて最終番号を入力してください"
       確認 &msg
     end
ここでフォーカスを&mEndに移せばいいのでしょうが
残念ながらわかりません。

思いつくままに書いてもましたがいかがでしょうか?

Re:フォームの表示の件 - ONnoji 2002年02月06日 22時36分

藤野さんへ

> 何とかここまで、きました、ますます面白くなってきました。

何事も面白くなければ上達しません。
面白いというのは多いに結構なことです。
いい調子ですね。
ドンドンいきましょう!!

さて、ご質問の内容は大きく二つに分類できますね。
(a) 訂正モードのこと
(b) エラーチェックのこと

> ところで。
> &mBiginingと&mEndの欄ですが、スペースきーを押さないと
> 入力モードになりません。

(a) それでは、訂正モードのことに関して…(^^ゞ

ダイアログボックスとはユーザに問いかけをしたり、各種設定をするための子ウィンドウのことです。
主ウィンドウには桐に独特な表示・訂正・挿入の各モードがあってもいいと思います。
しかし、子ウィンドウであるダイアログボックスには訂正モードだけあればいいと常々思っています。
藤野さんがおっしゃるとおりダイアログボックスでは表示モードと項目訂正モードが結構邪魔なんですよね。

ダイアログボックスを首尾一貫して訂正モードにするには少し工夫が要ります。
しかし、そんな工夫をしてまでやるだけの価値は十分あると思います。

(1) そこで、コマンドボタン:cmd実行 は次のように設定してください。(^^ゞ

  機能名   機能パラメータリスト
[1]表示    
[2]手続き実行 cmd実行Click
[3]訂正 ← ここを追加します。
[4]なし

(2) もう一つ、

「フォーム開始」イベントで次のメソッドを指定してください。(^^ゞ

メソッド呼び出し @フォーム.更新モード設定( 2 )

ここで説明すると長くなるので、
「§1の三角形の面積を求める」の「"フォーム開始"イベントを作成する」を読んでください。
※§2にも同様のことを解説しています。

(3) さらに、もう一つ。

フォームの属性の[編集]タブの[訂正モード]を ON にしてください。
こうすると項目訂正モードは訂正モードに置き換わります。
つまり、[スペース]キーを押すと、訂正モードになります。(^^ゞ

以上で訂正モードのことは大体解決すると思います。

(b) 次は、エラーチェックのことですね。

>  ここは入力前イベントですか
>  そうすると入力後イベントでエラー処理が出来そうな
> 気がしますが、
> たとえば
> 入力前  &mBigining=""
> 入力後  if (&mBigining="")
>        &msg="何も入力されていませんもう一度入力してください"
>         確認 &msg
>       else
> &msg="続いて最終番号を入力してください"
>        確認 &msg
>      end
> ここでフォーカスを&mEndに移せばいいのでしょうが
> 残念ながらわかりません。
> 思いつくままに書いてもましたがいかがでしょうか?

なるほど、
「何も入力されていませんもう一度入力してください」
「続いて最終番号を入力してください」
ですか〜。
ずいぶんと細かいことまで気を配りますね。

結論から先に申し上げるとこれは零点です。

なぜかと申し上げると…少し長くなりますが…

確かに、テキストボックスに入力した値がエラーの場合に、
適確なメッセージをするというのは間違えではありませんよ。

原子力発電所の制御システムや多額な金銭を取り扱うシステムなどでは、事細かにチェックが必要でしょう。
だって、やり直しは致命的になる可能性があるからです。

しかし、私達が取り扱う範囲はそれほど切迫していません。
むしろ、日常的なオペレーションの連続でしょうね。

プログラムを覚えた最初の頃は、どうしてもきびしいエラーチェックをしたくなるものです。
しかし、それは作り手側の腕試し…自己満足…という場合がほとんどです。

プログラムはそれを「使用する人の立場になって設計する」という原則を思いだしてください。
プログラムを作る人は、プログラムを使う人の意見を尊重して設計すべきです。

入力値をチェックしてその都度エラーメッセージを出していたら…
・誰だって、指が滑ることがありますよね〜!?
・誰だって、勘違することがありますよね〜!?
・とりあえず、試してみようかな〜なんて場合だってありますよね〜!?
だから、小姑みたいなメッセージは表示しない方が良いのです。(^^ゞ

ですから、テキストボックスを入力する都度チェックするのではなく、
[実行]ボタンをクリックしたときに本当に実行できるかをチェックすればいいのです。

ユーザインターフェースに関しては、まだまだまだ、言い足りないことがありますが〜、ということで、

エラーチェックは後回しにして、
訂正モードのことを先に試してください。

見事成功です・・・ - 藤野 2002年02月06日 23時42分

途中、フォームを半角にしなければならないエラーを除いては
上手くいきました。
 あれ、@フォームがありませんとメッセージが!!
でも何の事は無い半角で書かなければならなかったのですね (~_~;)

これを解決したら動きました、
まさに、こうしたかったのです・・・
感激・・・・・

改めてアプリケーション入門を読み直して、納得しました。

メッセージの件は言われたとおりです。丁度おぼえたてで
何でも、使いたがるのといっしょでつい出てしまったのです。
これでは、ガチガチの業務ソフトになってしまいますね。
自分もガチガチのソフトを使っていてなんでこんなに、
確認が多いのだ!!と叫びながら仕事していることを思い
出して、反省しています m(__)m

エラー処理に行く前に質問です - 藤野 2002年02月07日 20時29分

ONnojiさん今晩は、

今、見直して気づいたことがありあます。

 @一番初めのメニューフォームが番号選択のフォームを
 呼び出しても消えない。

 A番号選択のフォームの閉じるボタンを押してもメニュー
 フォームが表示しない。

これをメニューフォームから番号選択のフォームを呼び出したとき
メニューフォームが消えて番号選択フォームだけ表示、
番号選択フォームの閉じるボタンを押したとき、メニューホーム
が表示され、番号選択フォームが消えるようにするにはどうするので
すか。

Re:エラー処理に行く前に質問です - ONnoji 2002年02月07日 21時48分

藤野さんへ

> 今、見直して気づいたことがありあます。
>
>  @一番初めのメニューフォームが番号選択のフォームを
>  呼び出しても消えない。

「番号選択のフォーム」というのは今回作ったフォームのことですか???

メニューフォームからどういう方法で呼び出した(開いた)のですか?

>  A番号選択のフォームの閉じるボタンを押してもメニュー
>  フォームが表示しない。

cmd閉じる にそのような指定がしてありますか???

> これをメニューフォームから番号選択のフォームを呼び出したとき
> メニューフォームが消えて番号選択フォームだけ表示、
> 番号選択フォームの閉じるボタンを押したとき、メニューホーム
> が表示され、番号選択フォームが消えるようにするにはどうするのですか。

フォームからフォームへ移る方法はいろいろありますが、
藤野さんがおっしゃっている方法は私が勝手に命名した<開く閉じる型>です。

すでにイベント道場で解説してありますので、
トップページの「フォームを開く」を参照してください。

  以下は資料集です。
  データー編集で発生するイベント
  フォームの開始から終了
  変数について
  フォームを開く ← ここを見てください。

<開く閉じる型>は桐のサンプルのフォームで多く採用されている方法でが、
私は良いアプローチだとは思っていません。

それは、操作結果の時間的な前後関係が分らなくなるからです。
※今まで見えていたウィンドウが突然消えてしまうのは良いユーザインターフェースとはいえないと思います。

かといって、<往復型>が常にベストだとも思えません。
ただし、メニューフォームから開く場合には<往復型>は不自然ではありません。
とても調和しています。

トップページの「フォームを開く」には書いていませんが、
そうですね〜<マルチウィンドウ型>とでも呼ぶのでしょうか?、
これは、コマンドボタンで開けと指定したウィンドウが開き、
コマンドボタンで閉じろと指定したウィンドウが閉じるというものです。
※ここが<往復型>と大きく違います。
これが一番自然だと思います(ただし、モードレスウィンドウがたくさんあるのは問題です)。

ですから、藤野さんの場合は、<開く閉じる型>ではなく、
<往復型>を試して見ることをお勧めします。

モーダルフォームためしました - 藤野 2002年02月08日 20時17分

モーダルフォーム試しました。
なるほど、なるほど・・・・。

モーダルフォームで開いたとき
フォーム A から フォーム Bを開いたとします

フォームBを開くと
ファイル()編集(E)表示(V)入力(I)・・・ヘルプ(H)
が上の方に出てきます。
これは消す方法は無いんでしょうか?

Re:モーダルフォームためしました - ONnoji 2002年02月08日 21時10分

藤野さんへ

> モーダルフォーム試しました。
> なるほど、なるほど・・・・。
> モーダルフォームで開いたとき
> フォーム A から フォーム Bを開いたとします
> フォームBを開くと
> ファイル()編集(E)表示(V)入力(I)・・・ヘルプ(H)
> が上の方に出てきます。
> これは消す方法は無いんでしょうか?

方法はありますよ。
§3 モーダルフォーム をご一読下さい。

> <改良点>
> (1)TLU1.wfm のタイトルバーの下にはメニューバーが表示されています。このメニューバーは不用なので表示しないようにします。
> 11.フォームのオブジェクトの属性の[フォーム]タブの[メニューバー]のチェックをOFFにします。

エラー処理の考え方は? - 藤野 2002年02月07日 20時45分

さて、エラー処理をするときどうするか
考えてみました、これでいかがでしょう。

         実行ボタンが押される

 実行しないのは
  
  &Beginnig>&End
  &Beginnig=""または &End=""のとき

判断したら
  
  "もう一度入力してください"のメッセージをだす"
  &Beginnigにフォーカスを移す

これを
if (.not #eof)
の次に入れる
確認 "絞込み成功"


と続く
いかがでしょうか?

Re:エラー処理は最後の最後の最後 - ONnoji 2002年02月07日 21時57分

藤野さんへ

エラー処理は最後の最後の最後でいいですよ。

それまで、もう少し考えておいてください。(^^ゞ

またあせりました m(__)m - 藤野 2002年02月07日 22時58分

また、あせりました、
早く前に進みたいと、キモチだけが進んで行きます。
そういえば
誰かの歌に
長い道でも路のまま、心せかづに行きましょう・・・・・

というのがありました。

もう1つ、急いては事を仕損じる!
まるで今の私のようです 反省 m(__)m しております。


トップページに戻る あらすじ その1 その2 その3 その4 その5 その6 その7 その8 その9