過去の桐井戸端BBS (桐ver.9)
29092 表の項目のデータによってフォームでコマンドボタンの画面表示を切り替えたい 田代正巳 2005/02/17-18:10
またまたお世話になりたいのですが。

表 A.tbl に、項目が[1][2][3]があります。


[1]=表示する
[2]=表示しない
[3]=表示しない

と入力します。

メニュー.wfm

編集対象表はありません。

メニュ.wfmで、コマンドボタン b1,b2,b3に対して

A.tblの[1]=表示するになっていると、ボタンを表示する
[2]=表示しないになっていると、ボタンを表示しない
[3]=表示しないになっていると、ボタンを表示しない

こういったフォームの表示をしたいのです。

メニュー.wfmにイベントを設定して

表 A.tbl
&1=[1]
&2=[2]
&3=[3]
終了 表 編集対照表

ケース開始
  ケース(&1="表示する")
    オブジェクト操作 @b1.画面表示=1

  ケース(&1="表示しない")
    オブジェクト操作 @b1.画面表示=0

  ケース(&2="表示する")
    オブジェクト操作 @b2.画面表示=1

  ケース(&2="表示しない")
    オブジェクト操作 @b2.画面表示=0

  ケース(&3="表示する")
    オブジェクト操作 @b3.画面表示=1

  ケース(&3="表示しない")
    オブジェクト操作 @b3.画面表示=0

ケース終了
こうしたのですが、目的どおりの動作をしません。

29093 Re:フォームでの画面表示 今村 誠 2005/02/17-18:33
記事番号29092へのコメント
田代正巳さんこんにちは
よくわかりませんがケースで処理するのなら以下のようにしてみては
サンプルをアップするとテストできますがここのページの一番下に
補完するためにがありますので試してみては

ケース開始
 ケース(&1="表示する")
   オブジェクト操作 @b1.画面表示=1
  ケース開始
   ケース(&2="表示する")
     オブジェクト操作 @b2.画面表示=1
    ケース開始
     ケース(&3="表示する")
       オブジェクト操作 @b3.画面表示=1
     ケース(&3="表示しない")
      オブジェクト操作 @b3.画面表示=0
    ケース終了
   ケース(&2="表示しない")
     オブジェクト操作 @b2.画面表示=0
    ケース開始
     ケース(&3="表示する")
       オブジェクト操作 @b3.画面表示=1
     ケース(&3="表示しない")
      オブジェクト操作 @b3.画面表示=0
    ケース終了
  ケース終了
 ケース(&1="表示しない")
   オブジェクト操作 @b1.画面表示=0
  ケース開始
   ケース(&2="表示する")
     オブジェクト操作 @b2.画面表示=1
    ケース開始
     ケース(&3="表示する")
       オブジェクト操作 @b3.画面表示=1
     ケース(&3="表示しない")
      オブジェクト操作 @b3.画面表示=0
    ケース終了
   ケース(&2="表示しない")
     オブジェクト操作 @b2.画面表示=0
    ケース開始
     ケース(&3="表示する")
       オブジェクト操作 @b3.画面表示=1
     ケース(&3="表示しない")
      オブジェクト操作 @b3.画面表示=0
    ケース終了
  ケース終了
ケース終了
29098 Re:フォームでの画面表示 悲しげ 2005/02/17-21:44
記事番号29093へのコメント

よくわかりませんが(2)
こう云う場合は、むしろケースは使わないのではないでしょうか?
そうではなくて、例えば

条件(&1="表示する") オブジェクト操作 @b1.画面表示=1
条件(&1="表示しない") オブジェクト操作 @b1.画面表示=0
条件(&2="表示する") オブジェクト操作 @b2.画面表示=1
条件(&2="表示しない") オブジェクト操作 @b2.画面表示=0
条件(&3="表示する") オブジェクト操作 @b3.画面表示=1
条件(&3="表示しない") オブジェクト操作 @b3.画面表示=0

あるいはもっと短くすると、

&b1画=#cond(&1="表示する","1",1,"0"),\
&b2画=#cond(&2="表示する","1",1,"0"),\
&b3画=#cond(&3="表示する","1",1,"0")
オブジェクト操作 \
 @b1.画面表示=&b1画,@b2.画面表示=&b2画,@b3.画面表示=&b3画

さらに云えば 表 A.tblの[1] [2] [3]の項目値が、"1"か"0"である方がより簡便かもしれません?


29100 Re:フォームでの画面表示 アックン 2005/02/18-14:32
記事番号29092へのコメント
田代正巳さん、こんにちは。
ケースコマンドや IF文は、
上から順に条件を評価していって、
最初に成立した条件内のコマンド(ここではオブジェクト操作)だけを実行します。
それ以降のケース文は評価しないでなにもせず通り過ぎて終わります。
それで思い通りの結果を得られないわけです。

もしケース文または if文を使うとしたら、こんなふうに書きます。

if( &1="表示する" .and&2="表示する" .and&3="表示する" )
  オブジェクト操作 @b1.画面表示=1 , @b2.画面表示=1 , @b3.画面表示=1
else if( &1="表示する" .and&2="表示する" .and&3="表示しない" )
  オブジェクト操作 @b1.画面表示=1 , @b2.画面表示=0 , @b3.画面表示=1
else if( &1="表示する" .and&2="表示しない" .and&3="表示しない" )
  オブジェクト操作 @b1.画面表示=1 , @b2.画面表示=0 , @b3.画面表示=0
else if( ・・
   :
end

オブジェクト操作コマンドの実行は1度ですませましょう。
悲しげさんが2通りの回答を書いていますが、2番目のがいいと思います。

アックン(=^・^=)
29101 Re:フォームでの画面表示 アックン 2005/02/18-14:35
記事番号29100へのコメント
>else if( &1="表示する" .and&2="表示する" .and&3="表示しない" )
>  オブジェクト操作 @b1.画面表示=1 , @b2.画面表示=0 , @b3.画面表示=1

(正)オブジェクト操作 @b1.画面表示=1 , @b2.画面表示=1 , @b3.画面表示=0


29103 Re:フォームでの画面表示 アックン 2005/02/18-15:16
記事番号29101へのコメント
ところで正式な書式は、
画面表示="1" や 画面表示="0" のように、
ダブルクォーテーションで属性値を囲むようですね。
コマンドのマニュアルでは、1 0(ゼロ) としか書いてないですけど、
フォーム定義画面「オブジェクトのリスト」ではそうなっているようです。

この書式の表記のことと、今回の質問の動かない原因は無関係かと。

ぼくもかなり古いkevでは 画面表示=1 としてますけど、
ほとんどのkevで 画面表示="1" にしてます。
ダブルクォーテーションで囲んでおいた方がいいことを、
桐が古いバージョンの頃、いかすぱげてぃさんに教わった覚えがあります。

29105 Re:フォームでの画面表示 田代正巳 2005/02/18-20:41
記事番号29100へのコメント
みなさん、ご指導ありがとうございます。
今村さん、悲しげさんの方法、ちゃれんじしました。が、希望どおりになりませんでした。
アックンさんの方法も今チャレンジしましたが。。。。。
if(&1="表示する")
  オブジェクト操作 @b1.画面表示="1"・・・・・・としました。
しかし、動作しません。
.andはつかいませんでした。
それぞれ独立していますので・・・・!

29106 Re:フォームでの画面表示 ONnoji 2005/02/18-21:25
記事番号29105へのコメント
田代正巳さん、こんにちは。

横レスで失礼します。m(__)m

次のように試されたらいかがでしょうか?

<注意>
もしも、[名札 メイン]で行うのであれば、
&visible1, &visible2, &visible3 は局所変数で宣言します。

しかし、一般手続きやイベントハンドラで行うのであれば、
&visible1, &visible2, &visible3 は自動変数で宣言します。

以下の例は、[名札 メイン]で行う場合です。

*---------------------------*
名札 メイン
 変数宣言 局所,文字列{ &1, &2, &3 }
 変数宣言 局所,文字列{ &visible1, &visible2, &visible3 }

 表 A.tbl
 &1=[1]
 &2=[2]
 &3=[3]
 終了 表 編集対照表

 &visible1 = "0"
 if ( &1 = "表示する" )
  &visible1 = "1"
 end

 &visible2 = "0"
 if ( &2 = "表示する" )
  &visible2 = "1"
 end

 &visible3 = "0"
 if ( &3 = "表示する" )
  &visible3 = "1"
 end

 オブジェクト操作 @b1{ 画面表示 = &visible1 }
 オブジェクト操作 @b2{ 画面表示 = &visible2 }
 オブジェクト操作 @b3{ 画面表示 = &visible3 }


*---------------------------*

<追伸>

オブジェクトが状況よって表示されていたり、
非表示になっていると、利用者の短期記憶を混乱させる心配があります。

非表示にする代わりに、指標不可表にするというのも一案ですよ。


29107 Re:フォームでの画面表示 ONnoji 2005/02/18-21:34
記事番号29106へのコメント
>非表示にする代わりに、指標不可表にするというのも一案ですよ。

失礼しました。(^^ゞ
以下のように訂正いたします。

【誤】
非表示にする代わりに、指標不可表にするというのも一案ですよ。

【正】
非表示にする代わりに、指標不可表示にするというのも一案ですよ。


29108 Re:フォームでの画面表示 今村 誠 2005/02/18-21:37
記事番号29105へのコメント
田代さんこんにちは、不要な引用は範囲指定して削除して投稿されたほうが、
この掲示板を見ている多くの人がわかりやすいと思います。

最初の投稿にも書いたように、早く解決するには、サンプルをアップ
するのが一番わかりやすいと思います。

http://www.fuku3.com/~habata/cgi-bin/bbs1/clip.cgi
こちらは「桐井戸端BBS」を補完するための場所です。

「桐井戸端BBS」の文章だけではうまく伝わらない場合、
実際のデータファイルを見て欲しい場合など、画像やデータファイルを
アップロードできますので補完的に活用してください。

データファイルの場合は、あらかじめLZH形式で圧縮してください。
また、実際の生データを公開するのは問題もあるので、
架空のデータと入れ替えるなどのご配慮をお願いいたします。

圧縮でいつも使っています。解凍にも使えます。
http://www.vector.co.jp/soft/win95/util/se166893.html

 画面表示が変わらないのはお書きになっていない部分に問題があると思います。

メニューフォームがマル秘扱いなのであれば、似たようなフォームを
新たに作成してテストできるようにしてアップしてみてはいかがでしょうか?
29109 使用不可表示でした。 ONnoji 2005/02/18-21:39
記事番号29107へのコメント
>>非表示にする代わりに、指標不可表にするというのも一案ですよ。

再三の間違えで誠に失礼しました。(^^ゞ
以下のように訂正いたします。

【誤】
非表示にする代わりに、指標不可表にするというのも一案ですよ。

【正】
非表示にする代わりに、使用不可表示にするというのも一案ですよ。

29110 Re:フォームでの画面表示 たゆー 2005/02/19-09:44
記事番号29092へのコメント
田代正巳さん

>メニュ.wfmで、コマンドボタン b1,b2,b3に対して
>
>A.tblの[1]=表示するになっていると、ボタンを表示する
>[2]=表示しないになっていると、ボタンを表示しない
>[3]=表示しないになっていると、ボタンを表示しない
>
>こういったフォームの表示をしたいのです。

ご質問の、「画面表示する・画面表示しない」ではありませんが
ボタンを背景色に変更する方法を紹介します

ただし、非表示ではないので、ボタンの場所をクリックすれば
実行されますので、ご注意下さい

こちらに登録しました

29111 Re:フォームでの画面表示 アックン 2005/02/19-12:56
記事番号29092へのコメント
田代正巳さん>
サンプルをアップしました。

原因が判明しました。
フォーカスがあるボタンは、画面表示="0" だけでは表示されたままになります。そこで対策をふたつ。

ひとつは、フォーカス設定メソッドで他のオブジェクトにフォーカスをいったん移動してから、画面表示="0" にする。
(サンプルのフォームのボタン btest1 がこれに該当します。)

ふたつめは、フォーカス設定メソッドを使わず、
フォーカスの設定 = "禁止" と 画面表示="0" とする。
(サンプルのフォームのボタン btest2 がこれに該当します。)

アックン(=^・^=)

29112 Re:フォームでの画面表示 アックン 2005/02/19-13:02
記事番号29111へのコメント
サンプルはV9-2005(2004sp2) 対応です。
イベントを二つに分けてコピペしときます。

名札 メイン
  var 固有 , 文字列 { &b1,&b2,&b3 }
  表 "20050219メニューフォームのボタン表示非表示切替.tbl"

手続き定義開始 btest1::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長
整数 &フラグ,参照 長整数 &処理中止)
  編集表 "20050219メニューフォームのボタン表示非表示切替.tbl"
  &秒 = #乱数(6)+1
  ジャンプ 行番号=&秒
  &b1=[1] , &b2=[2] , &b3=[3]
  method @フォーム.変数変更()
  method @btest1.フォーカス設定()
if( &b1="表示する" .and&b2="表示する" .and&b3="表示する" )
  object @b1.画面表示="1" , @b2.画面表示="1" , @b3.画面表示="1"
else if( &b1="表示する" .and&b2="表示する" .and&b3="表示しない" )
  object @b1.画面表示="1" , @b2.画面表示="1" , @b3.画面表示="0"
else if( &b1="表示する" .and&b2="表示しない" .and&b3="表示しない" )
  object @b1.画面表示="1" , @b2.画面表示="0" , @b3.画面表示="0"
else if( &b1="表示しない" .and&b2="表示しない" .and&b3="表示しない" )
  object @b1.画面表示="0" , @b2.画面表示="0" , @b3.画面表示="0"
else if( &b1="表示しない" .and&b2="表示する" .and&b3="表示しない" )
  object @b1.画面表示="0" , @b2.画面表示="1" , @b3.画面表示="0"
else if( &b1="表示しない" .and&b2="表示する" .and&b3="表示する" )
  object @b1.画面表示="0" , @b2.画面表示="1" , @b3.画面表示="1"
end
手続き定義終了
(続く)
29113 Re:フォームでの画面表示 アックン 2005/02/19-13:03
記事番号29112へのコメント
(続き)
手続き定義開始 btest2::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
  編集表 "20050219メニューフォームのボタン表示非表示切替.tbl"
  &秒 = #乱数(6)+1
  ジャンプ 行番号=&秒
  &b1=[1] , &b2=[2] , &b3=[3]
  method @フォーム.変数変更()
*  method @btest2.フォーカス設定()
if( &b1="表示する" .and&b2="表示する" .and&b3="表示する" )
  object @b1{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b2{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b3{ @b1.フォーカスの設定 = "自動" , 画面表示="1" }
else if( &b1="表示する" .and&b2="表示する" .and&b3="表示しない" )
  object @b1{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b2{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b3{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" }
else if( &b1="表示する" .and&b2="表示しない" .and&b3="表示しない" )
  object @b1{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b2{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" } ,\
@b3{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" }
else if( &b1="表示しない" .and&b2="表示しない" .and&b3="表示しない" )
  object @b1{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" } ,\
@b2{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" } ,\
@b3{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" }
else if( &b1="表示しない" .and&b2="表示する" .and&b3="表示しない" )
  object @b1{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" } ,\
@b2{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b3{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" }
else if( &b1="表示しない" .and&b2="表示する" .and&b3="表示する" )
  object @b1{ @b1.フォーカスの設定 = "禁止" , 画面表示="0" } ,\
@b2{ @b1.フォーカスの設定 = "自動" , 画面表示="1" } ,\
@b3{ @b1.フォーカスの設定 = "自動" , 画面表示="1" }
end
手続き定義終了
29125 Re:フォームでの画面表示 田代正巳 2005/02/21-22:43
記事番号29113へのコメント
アックンさん
サンプルまでつくっていただきありがとうございます。
また、返事が大変遅くりもうしわけありません。

サンプルを拝見しても理解ができないと思います。
勉強しますので質問が発生したときにには
よろしくご指導ください。

戻る