過去の桐井戸端BBS (桐ver.9)
24836 フォーム上で特定の項目の入力有無でOKボタンを表示・非表示で切り替えたい トム 2004/02/13-16:22
またまたご教授お願いします。桐Ver9です。
会議室予約システムをsampleを利用して作成中です。
フォーム上の必要な項目を入力以後、予約ボタンをクリックすると、『予約確認フォーム』が現れ、
必要データが整理されて表示されます。
sampleでは、予約者名の入力が無くてもこの『予約確認フォーム』が現れて、
さらにそのまま(予約者データなしで)OKボタンをクリックするとそのまま登録されてしまうので、
今回、『予約確認フォーム』上で「予約者名」が入力されていれば、
OKボタンのフォーカス設定が”許可”になり、「予約者名」が入力されていなければ、
OKボタンのフォーカス設定が”使用不可表示”となり、「予約者名」が入力されるまで
OKボタンで登録されないようにしたいと考えています。
責任者名のオブジェクト名をt予約者、変数を&予約者、OKボタンのオブジェクト名をbOKとし、
OKボタンのオブジェクトの属性のフォーカス設定を使用不可表示に設定しています。

そして、下記のイベントを組んだのですが、思い通りにOKボタンが表示・非表示になってくれません。

手続き定義開始 t予約者::ソース値更新()
   ケース開始
     ケース (&予約者≠#未定義)
       オブジェクト操作 @bOK.フォーカスの設定 = "許可"
     ケース (&予約者=#未定義)
       オブジェクト操作 @bOK.フォーカスの設定 = "使用不可表示"
   ケース終了

手続き定義終了

イベントについてはど素人なもので、上記のイベントが的を得ていないかもしれませんが、
お手柔らかにご教授いただけないでしょうか。お願い致します。

24838 Re:フォーム上で特定の項目の入力有無でOKボタンの実行可・不可 bonito 2004/02/13-17:32
記事番号24836へのコメント
トムさん

この程度なら無理して(失礼)イベントでなくとも可能だと思います
但しもっとデープにやるならやっぱイベントでしょうが...

ただ1点、t予約者なるオブジェクトのソースが変数 &予約者なのか
「予約者名」なるtblの項目なのか該当するsampleを見た事のない
私には判断しかねるところではありますが...

OKボタンの1行目の機能名に「その他」から「実行条件」を選び
そのパラメータに &予約者≠"" (もしかしたら[予約者名]≠"")
と書いて見て下さい。

なおこれは たゆー さんのところで教えていただいたのですが
実行条件の第二パラメータ(第一の次にカンマで区切って書く)が
真ならボタンは凸でなく凹になります。
あっ今回の事にはあんまり関係なかったです、済みません。
24839 Re:フォーム上で特定の項目の入力有無でOKボタンを表示・非表示で切り替えたい アックン(=^・^=) 2004/02/13-18:07
記事番号24836へのコメント
トムさん、こんばんは。すでにbonitoさんが回答されてますが、ぼくはイベントの話をします。
エラーメッセージは出ず、たんにうまく動作してないだけのようですね。

1)こうするとどうですか?

手続き定義開始 t予約者::ソース値更新()
 if( &予約者 )
   object @bOK.フォーカスの設定 = "許可"
   object @bOK.タブストップ = "1"
 else
   object @bOK.フォーカスの設定 = "使用不可表示"
   object @bOK.タブストップ = "0"
 end
手続き定義終了

2)ふつうこうすれば動きますが、念のために確認コマンドを入れてみますか。
手続き定義開始 t予約者::ソース値更新()
 確認 &予約者
 if( &予約者 )
    :
手続き定義終了

3)オブジェクト属性の編集属性式、コマンドボタンの機能名の内容と整合がとれてないと、
うまくいかないことがよくあります。チェックしてみてください。

4)イベントの他の箇所がじゃましているかもしれません。

5)ソース値更新イベントをOFFにしているとか。私よくやります。(=^・^=:

24842 Re:フォーム上で特定の項目の入力有無でOKボタンの実行可・不可 悲しげ 2004/02/13-19:05
記事番号24838へのコメント
bonitoさん wrote

>ただ1点、t予約者なるオブジェクトのソースが変数 &予約者なのか
>「予約者名」なるtblの項目なのか該当するsampleを見た事のない
>私には判断しかねるところではありますが...

ですよね。次のように書き換えて試してみたらどうでしょう?

手続き定義開始 t予約者::ソース値更新()
 ケース開始
 ケース ([予約者]≠#未定義)
  オブジェクト操作 @bOK.フォーカスの設定 = "許可"
 ケース その他
  オブジェクト操作 @bOK.フォーカスの設定 = "使用不可表示"
 ケース終了
手続き定義終了

24845 イベントリストのチェックマーク(イベント処理の仕組み) 佐田 守弘 2004/02/13-23:36
記事番号24839へのコメント
トムさん
私はアックンさんの
 >5)ソース値更新イベントをOFFにしているとか。私よくやります。(=^・^=:
に1票入れます。

その確認としてお伺いします。イベントはどの様にして作りましたか?
@フォームの属性でイベントのタブを開き、イベントファイル名を予め入力しておく
A該当するオブジェクトのイベントのタブを開き、イベント名をダブルクリックする。
B上記操作で開かれてイベントファイルの編集画面で、イベントを入力する。

以上の手順を踏みましたか?
単にイベントファイルを作成して、イベントハンドラ(手続き)を作成してもだめです。
人から聞いたイベントをコピーして使おうとすると、この誤りに落ちます。
そこで、イベント処理の仕組みを述べておきます。

●イベント処理の仕組み
それぞれのオブジェクトで、イベント名として定義されている事象(要するにイベント)が生じた時に、
桐はそのオブジェクトのイベントリストをチェックします。
より具体的に言えば、テキストオブジェクトを編集しようとして、マウスでクリック、ないし
スペースを押すなどの操作をすると編集モードに入るわけですが、編集モードに入る直前に
入力前イベントが発生します。
同様に値を入力してENTERキーで確定した直後で、表への書き込みの前に、入力後イベントが発生します。
入力が終って表に値を書き込み終わると、ソース値更新イベントが発生します。
「イベントが発生する」と書きましたが、正しく言えば、それぞれのイベントのチェックが行われます。
そして、イベントリストに該当するイベントが設定されているかどうか、
つまり、イベント名にチェックマークがついているかを桐が調べます。

もしチェックがついていなければ、何もなかったかの様にそのまま次に進みます。
チェックマークがついていれば、イベント処理を行うために、イベントファイルの中の該当する
イベントハンドラ(手続き定義開始〜終了までの部分)を探しに行きます。
そのイベントハンドラが見つかれば、割り込み処理として、書かれているコマンドが実行されます。
そして実行が終ると、元の処理に戻ります。
もしイベント名にチェックが入っていても、該当するイベントハンドラが作られていないと、
何もイベント処理は行わずに、元に戻ります。この時にエラーにはなりません。

佐田守弘(KS-00119)
24862 Re:イベントリストのチェックマーク(イベント処理の仕組み) トム 2004/02/14-21:49
記事番号24845へのコメント
bonito様、悲しげ様、アックン様、佐田様たくさんのご教授ありがとうございます。
返事が遅くなりまことに申し訳ありません。
次のようにいろいろと試してみました。

bonito様のご指摘の
>ただ1点、t予約者なるオブジェクトのソースが変数 &予約者なのか
>「予約者名」なるtblの項目なのか該当するsampleを見た事のない
>私には判断しかねるところではありますが
については、「t予約者なるオブジェクトのソースが変数 &予約者」です。

悲しげ様の
>手続き定義開始 t予約者::ソース値更新()
> ケース開始
> ケース ([予約者]≠#未定義)
>  オブジェクト操作 @bOK.フォーカスの設定 = "許可"
> ケース その他
>  オブジェクト操作 @bOK.フォーカスの設定 = "使用不可表示"
> ケース終了
>手続き定義終了

アックン様のご指摘のソース値更新イベントのONを確認して、
>手続き定義開始 t予約者::ソース値更新()
> if( &予約者 )
>   object @bOK.フォーカスの設定 = "許可"
>   object @bOK.タブストップ = "1"
> else
>   object @bOK.フォーカスの設定 = "使用不可表示"
>   object @bOK.タブストップ = "0"
> end
>手続き定義終了
の両方を試しても反応なしです。

佐田様のご指摘の
>その確認としてお伺いします。イベントはどの様にして作りましたか?
>@フォームの属性でイベントのタブを開き、イベントファイル名を予め入力しておく
>A該当するオブジェクトのイベントのタブを開き、イベント名をダブルクリックする。
>B上記操作で開かれてイベントファイルの編集画面で、イベントを入力する。
>以上の手順を踏みましたか?
についても、きちんと手順を踏んでいます。

ただ、bonito様ご提案の
>OKボタンの1行目の機能名に「その他」から「実行条件」を選び
>そのパラメータに &予約者≠"" (もしかしたら[予約者名]≠"")
>と書いて見て下さい。
を「&予約者≠""」で実行すると、あらかじめ予約入力フォームで入力されている場合は、
確認用フォームでも自動的に表示されて、OKボタンが期待通りON・OFFしますが、確認用フォームで
予約者の表記を消したり訂正するとON表示がOFF表示にかわったままでOKボタンを押すことができません。

ここで、私の設定を少々詳しく申し上げると、
予約入力フォームで予約者を&予約者として定義し、その入力欄で入力した後、
予約ボタンで確認用フォームが現れ、その確認用フォームの中に先ほど予約入力フォームで入力された予約者
が同じく変数&予約者で定義されたオブジェクト欄に表示されるという流れです。
そして、今回の困っているのは、予約入力フォームで入力されずに予約ボタンを押すと、
当然現れた予約確認フォームの予約者の欄は未表示の状態なので、この確認用フォーム上で
予約者を入力することによりOKボタンがOFF表示からON表示のなり予約完了させたいのです。

ながながと説明(まだ物足りないかもしれませんが)をしましたが、どうかご考察よろしくお願いいたします。

戻る