過去の桐井戸端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表示のなり予約完了させたいのです。 ながながと説明(まだ物足りないかもしれませんが)をしましたが、どうかご考察よろしくお願いいたします。 |