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

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

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

別のツリーに続きを作りました - ONnoji 2002年02月16日 22時33分
住所追加フォームでのエラー処理 - 藤野 2002年02月17日 17時54分
Re:住所追加フォームでのエラー処理 - 【多遊】 2002年02月17日 20時35分
エラー処理?表で試しました - 藤野 2002年02月17日 21時43分
再入力を強制するのはいいことではありません。 - ONnoji 2002年02月17日 21時20分
納得です。 - 藤野 2002年02月17日 21時47分
さっそく - 藤野 2002年02月17日 22時20分
ラベルオブジェクトを作って - ONnoji 2002年02月17日 22時26分
イベントは使いません。 - ONnoji 2002年02月18日 00時08分
エラー プロパティ名を指定してください? - 藤野 2002年02月18日 21時00分

別のツリーに続きを作りました - ONnoji 2002年02月16日 22時33分

藤野さんへ

リプライが遅くなってすいませんでした。m(__)m

> さて多重化フォームを使ったのは

> 機能名1   パラメーター
> 開く     "写真展(50音)wfm"
> とすると、表は既に使用されていますというメッセージが出たからです。

> 昨日書き込んだ
> 住所追加フォームから写真展住所clickのボタンを作り、写真展(50音)wfmを開いています。
> フォームはこ50音順に並べ変えをして見やすくしたものです
> 機能名1          パラメーター
> 多重化_フォーム編集    ”写真展(50音)wfm”

> この部分ですが
> いま帰宅して何気なく機能名1のところを見ていたら
> フォームの選択というのがありました。
> ためしに
> 機能名1       パラメーター
> フォームの選択    ”写真展(50音)wfm"

> としてみたらなんと上手く動きました。
> 動いたので良いとするか、それともこのフォームを開くの利用法はこれでしょうか?

(1)[開く]"写真展(50音)wfm"は、[ファイル]メニュー → "写真展(50音)wfm" を選ぶのと同じです。

(2)[多重化_フォーム編集]"写真展(50音)wfm"は、
[表示]メニュー → [表編集] → [ウィンドウ]メニュー → [新しいウィンドウを開く]として、
表編集ウィンドウを多重化した後に、
それぞれの表編集ウィンドウで、[表示]メニュー → [フォームの選択]を選ぶのと同じです。

(3)[フォームの選択]"写真展(50音)wfm"は[表示]メニュー → [フォームの選択]を選ぶと同じです。

という具合に、[コマンドボタンの機能]は[メニューから出来る操作]と同じ内容の場合が多いですよ。

コマンドボタンの機能名から、何かいいことがないかなあ〜?と試すのではなく、
その逆でメニューを選んで出来ることで、それが登録されていないかな〜?と捜すのがいいと思いますね。

コマンドボタンや、コマンド名、関数名に精通してもほとんど意味がありません。
それより、対話操作の表編集やフォーム編集に精通することの方が大切ですよ。(^^ゞ

> それと[多重化_フォーム編集]、[フォームの選択]はどんなときに使うのがベストなんでしょうか?

同様に、どんなときに使うのがベストというふうに考えるのも、ほとんど意味がありません。
むしろ、両方とも試して自分のイメージに近い対話操作を実現するのに適している方を採用すればいいです。
場合によっては、どちらも適さないこともあるでしょうし、両方とも適していることもあります。

ですから、「○○機能は○○の時にベスト」というふうに覚えてしまおうというのは、やめた方がいいですよ。

フォームのスタイルや機能のデザインは理屈として頭で考えるのではなく、
いろいろなアイデアを紙などにイメージとして描き、それから実際に作って何度も試してみるということ大切です。(^^ゞ

ぜひ「コラム2 フォーム仕様書」をご一読ください。

住所追加フォームでのエラー処理 - 藤野 2002年02月17日 17時54分

フォームのほうは色々試してみています。
どうも全体を見失ってしまったようです、反省、反省

さて住所追加フォームですが現在の配置

ふりがな  性別  連名1
氏  名      連名2
          連名3

〒         都道府県
住所1
住所2

タブオーバーは
氏名     ON 継承
ふりがな   ON 継承
性別     ON 定義
連名1     ON 定義
連名2     ON 定義
連名3     ON 定義
〒      ON 定義
都道府県   OFF 定義
住所     ON 定義
住所2     ON 次行

このようになっています。
氏名が未定義になったとき、”入力されてません”
とメッセージをだし再入力したいのですが?
このフォームは
オブジェの属性でオプション 実行コマンド 開始時 入力
に設定してあります。
これも手続きで定義するのでしょうか?
それともイベントですか?

Re:住所追加フォームでのエラー処理 - 【多遊】 2002年02月17日 20時35分

藤野さん>こんばんは

またまた横やりではずしてるかも知れませんが・・・

>氏名が未定義になったとき、”入力されてません”
>とメッセージをだし再入力したいのですが?

このようなメッセージや未定義を防ぐのは、なにもフォームや
イベントを使用しなくても可能です。

表(tbl)の方にもかなり制約やエラーメッセージがありまして、
またそれをフォームにするだけで、同様の処理は可能です
ご質問とかなりはなれてるかもしれませんが、一度表(tbl)で
お試しになるのも一手です。

エラー処理?表で試しました - 藤野 2002年02月17日 21時43分

多遊さん
いつもありがとうございます。
早速、表で試しました、項属性で未定義禁止にチェック
をしました、最後の項目までいって次の行に行くときに
再入力を要求されました。
なるほど、なるほど、と関心ばかりです。

確か、桐の基本は表作りだと聞きましたし、幅田さんの
ページに書いた表の”書き出し”の件もダミー項目を作る
事で解決できました。
いずれも私の経験不足とマニュアルを読まないところから
きていると思います。マニュアルの表のところもう一度
読み直します。

今後ともご指導よろしくお願いします。

再入力を強制するのはいいことではありません。 - ONnoji 2002年02月17日 21時20分

藤野さんへ

> フォームのほうは色々試してみています。
> どうも全体を見失ってしまったようです、反省、反省

> さて住所追加フォームですが現在の配置
> タブオーバーは
> 氏名     ON 継承
> ふりがな   ON 継承
> 性別     ON 定義
> 連名1     ON 定義
> 連名2     ON 定義
> 連名3     ON 定義
> 〒      ON 定義
> 都道府県   OFF 定義
> 住所     ON 定義
> 住所2     ON 次行
> このようになっています。

> 氏名が未定義になったとき、”入力されてません”
> とメッセージをだし再入力したいのですが?
> このフォームは
> オブジェの属性でオプション 実行コマンド 開始時 入力
> に設定してあります。
> これも手続きで定義するのでしょうか?
> それともイベントですか?

空欄に文字を記入していく(空欄記入型)のデザインの場合、
入力作業の途中で再入力を強制するのはいいことではありません。

住所追加フォームの場合では、氏名の入力は必須ですが、
うっかり[Enter]や[Tab]を押す事だってありますよね。

それだけのことで、"氏名が入力されてません"とメッセージを出すというのは、
作り手の藤野さんにとって良くても、
使う人からすれば他の入力域でも同じようなことが起きるだろうと予想します。
これはまるで目隠しをして地雷原を歩くようなもので、安心して操作ができません。(~_~;)

ところで、少し寄り道のお話をします…これは重要なことです。

誰でも、初心者 → 上級者 → プロフェッショナル → エキスパート という段階のどこかに位置します。
これはコンピュータ操作に限らず、すべての事柄に当てはまります。

あるフォームを操作する場合、利用者はいつまでも初心者のレベルで留まっているわけではありません。
はじめて操作するフォームの場合、最初は初心者のレベルです。
しかし、段段と操作に慣れてすぐに(ある程度自分で判断できる)上級者になります。

今回のように、「メッセージボックスを表示して、再入力を強制する」というのは
初心者には歓迎されるでしょうけれど、
操作に慣れた上級者にとっては、わずらわしいだけです。
感謝するどころか、このフォームを作った人を罵りたくなります。
「どうしてこの馬鹿ソフトはこんなにもガチガチなんだ!!!」とですね。

この段階で、作り手と利用者は反目しあうことになります。
こういう経験は藤野さん自身もたくさんしていると思います。
ですから、作り手は「利用者はいつまでも初心者のレベルに留まっていない」ということを自覚するべきです。

さて、話しを元に戻しましょう。

利用者に地雷を踏ませないようにするには、"ここに地雷が埋まっていますよ!"と教えてあげる方法があります。
例えば、インターネットで名前を入力するフォームの場合には、"全角で入力"とかありますよね。
私達はそれを見て、ここは全角で入力するのだなと直感的に理解しているのです。
ですから、氏名の入力域の近くに(上または右)に"必須"とコメントするだけで、利用者は注意深くなります。
たったこれだけのことで、地雷を踏んで利用者が作者を罵ることを防げます。
"必須"というたった二文字のコメントですが、これは道路標識のような役目をするのです。
運転中に「制限速度40Km」という道路標識を認めれば、我々は無意識に注意して運転します。
しかし、何も道路標識がない道路を通行中に、突然ねずみ取りで捕まったなら、きっと頭に来るでしょう?

したがって、入力域の近くにコメントを用意するというのはいい方法です。
しかし、コメントは必要最小限にしなければ意味がありません。
運転中に同時にたくさんの道路標識を一度に見せられたら、混乱するだけですよね。(^^ゞ

その他の方法としては、氏名欄に文字を入力しないで次の項目へ移った時に、
フォームの決まった場所(一般的にはフォームの左下)に、"氏名が入力されていません"と表示する方法もあります。
利用者がこのメッセージを認めることで、即座に入力ミスに気が付くというわけですね。
利用者がこの暗黙のルールを了解していれば、ただちに入力ミスを修正する操作にとりかかるはずですね。(^^ゞ

どうでしょうか、「メッセージボックスを表示して、再入力を強制する」方法に比べれば、
このほうがユーザに優しいとは思いませんか?

さて、すべての入力域を移動すると(必ずしもすべて記入するわけではありません)、
この行を登録する段階が必ず来ます。
もう気が付いたでしょう〜!?
この段階で、入力ミスを調べればいいのです。

さて、行を登録する段階で入力ミスを調べるのは少し面倒です。
したがって、これは後回しにして、
まず、(1)コメントを付けることを試してください。
次に(2)フォームの左下に注意メッセージを表示することを試してみましょう!

(3)最後に、行を登録する最終段階で入力ミスをチェックすることにトライしましょう!!

時間がかかりますが、時間は十分あります。
一歩一歩確実に進むことが大切だと思います。(^^ゞ

リプライをお待ちしています。

<追伸>

今回の例のように「氏名が空です [OK]」のようなメッセージボックスは、
常に[OK]を選ぶしかありません。
このように[OK]だけを選ぶメッセージボックスは無駄だけでなく不要な場合が多いはずです。

プログラムは面白いものです。
藤野さんもONnojiもきっとプログラムが大好きなのでしょうね。
しかし、利用者に優しいプログラムを作るのはなかなか難しいのですよ。

「藤野さんはまだ初心者だから利用者に優しいプログラム作りは難しい」と考えるのは誤りです。
初心者だからこそ、利用者に優しいプログラム作りのコツを覚えてください。

残念ながら、プログラム作りの上級者やプロフェッショナルといわれる人達でも、
利用者に優しいプログラムを作れるとは限らないのです。
そうなる原因のひとつは、「コンピュータの動作にのみ関心を持って、利用者の感覚に無関心」なことです。

納得です。 - 藤野 2002年02月17日 21時47分

ONnojiさん
言われるとうりです。ガチガチのプログラムで何度なかされたか
桐ならできるのにと、何度思ったことか・・・・。

 思い直して挑戦あるのみ、”千里の道も一歩から”

今書きながら、コメントをどうやってつけるんだなどど
考えています (^^ゞ

さっそく - 藤野 2002年02月17日 22時20分

思いつくままに書いてみました。

まずただメッセージを出すだけのものですね。

@
 手続き定義開始 t氏名::入力前(参照 文字列 &編集文字列)
 変数宣言 整数 {&ans}
 変数宣言 文字列 {&msg}

 &msg=”氏名を入力してください!”
 確認 &msg,&ans
 
 手続き定義終了

 これだと注意を促すより何度もOKを押すようなので大変です
 注意にはなりますけど・・・・(^^ゞ
 これはたぶんいけない例ですね (^^ゞ

A
 手続き定義開始 t氏名::入力前(参照 文字列 &編集文字列)


 &編集文字列=”氏名を入力してください!”
 手続き定義終了

 これだと テキスト t氏名 の欄に”氏名を入力してください”
 がでますが 入力前にCLEARしなければなりません。
 これもわずらわしいです。

B 
 確かオブジェクトで表示することも出来たような・・・
 調査中です

もしかしてコメントをつけるの解釈間違っていましたか?

ラベルオブジェクトを作って - ONnoji 2002年02月17日 22時26分

藤野さんへ

> もしかしてコメントをつけるの解釈間違っていましたか?

テキストボックスの近くにラベルオブジェクトを作って、
それをコメントとして利用してください。(^^ゞ

イベントは使いません。 - ONnoji 2002年02月18日 00時08分

藤野さんへ

> > もしかしてコメントをつけるの解釈間違っていましたか?
> テキストボックスの近くにラベルオブジェクトを作って、
> それをコメントとして利用してください。(^^ゞ

イベントは使いませんよ。
固定の文字列でいいのです。
ですから、ラベルオブジェクトで十分なのです。

エラー プロパティ名を指定してください? - 藤野 2002年02月18日 21時00分

やはり勘違いでした。
早速、ラベルで貼り付けました。

それでは、次に挑戦

左下にメッセージを出すにはオブジェクト操作だな
とあたりをつけて・・・
下記のようにしました見事エラーでした

手続き定義開始 t氏名::入力前(参照 文字列 &編集文字列)
表 ”写真展住所録”
オブジェクト操作  @コメント注意,画面表示=0
if ([氏名]=#U)
 オブジェクト操作  @コメント注意,画面表示=1
end
手続き定義終了

どうも画面表示=0
   画面表示=1
の後にプロパティ名を指定するらしいのです。

プロパティ名とは何でしょうか。?


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