過去の桐井戸端BBS (桐ver.8)
14002 メイン&サブフォームで新規入力ボタンを押しても入力できない 松本由紀子 2001/11/16-14:13
はじめて質問します。
よろしくご指導ください。

桐というソフトを去年からつかっています。
メイン&サブフォームで
メインに、得意先.tblをサブに、売上.tblをつかってフォームをつくりました。が

新規・訂正などの処理はコマンドボタンで行うようにしました。
新規入力は機能名に 行追加
サブ追加は機能名に フォカス移動 機能パラメータリストにサブフォーム
          行追加
サブ訂正は機能名に ファカス移動 機能パラメータリストにサブフォーム
・・・・・・
といった具合に指定したのですが、
新規入力ボタンをクリックしても入力できない。
など、ボタンを押しても動作しません。
入力モードにならず、編集モードのままなのです。
どなたか、よろしくご指導ください。


14003 Re:メイン&サブ アックン 2001/11/16-18:28
記事番号14002へのコメント
松本由紀子さん、はじめまして。
たとえば次のようにされてはどうでしょう。

・親フォームの行追加
機能名  機能パラメータリスト
行追加  "txt_得意先名"  ←親フォームのオブジェクト名を指定する。

オブジェクト名を指定します。

・子フォームの行追加
実行条件 [得意先名] ←親フォームの編集対象表の[得意先名]に値があれば
次行を実行する、という条件式。
行追加  "サブフォーム_1" ←サブフォーム(オブジェクト名)を指定する。

・子フォームの訂正
実行条件 [得意先名]
訂正   "サブフォーム_1"

実際にはさらに細かい動作や条件などが必要になると思いますけど、それは他の詳しい方にお譲りします。それでは。

アックン(=^・^=)
14004 Re:メイン&サブ 松本由紀子 2001/11/16-20:09
記事番号14003へのコメント
アックンさん、はじめまして
ありがとうございます。

何とかできました。
ところで、
メインとサブは普通ちがう表を指定するようですが
同じ表を指定したらどうなるのでしょうか?
そんなことはできるのでしょうか?


14005 Re:メイン&サブ bonito 2001/11/16-22:39
記事番号14004へのコメント
松本由紀子さん、アックンさんからなかなか返事がこないようなので...(^^;  失礼して...

>メインとサブは普通ちがう表を指定するようですが
>同じ表を指定したらどうなるのでしょうか?
>そんなことはできるのでしょうか?

もちろん出来ます。
但しサブの方のフォームの属性で編集対象表のタブにある許可作業ボタンをクリックして「多重化」に
チェックを入れる必要があります。



14006 Re:メイン&サブ 松本由紀子 2001/11/17-08:07
記事番号14005へのコメント
bonitoさんありがとうございます。
サブフォームの削除ですが、
これまたできないんですよ!
コマンドボタンで明細削除で機能名は、指定行削除パラメータは確認する
ところがメインフォームが消えてしまうんです。

よろしくご指導ください。
14010 Re:メイン&サブ bonito 2001/11/17-12:52
記事番号14006へのコメント
アックンの教示した方法、
Helpでいうところの
>サブフォームを指定するとサブフォームに対する機能となる
(わかりにくい!つまりメインフォーム上でのサブフォームのオブジェクト名を指定すると...という意味ですね)
は「行訂正」と「行追加(挿入)」のみに有効です。
(のみと言い切って大丈夫だろうか?他にもあるかも...)

ですから(最初の)質問の最初の答えは、サブフォームを処理するボタンはサブフォームに置くのが正しい(?)使い方です
となります。
でも格好悪いのでメインに勢ぞろいさせたいと...。

こういう場合(例えば行削除とか)、私は仕方なくkevに
*---------------------------------
手続き定義開始 サブボタン実行(文字列 &ぼたん)
  メソッド呼び出し @サブ.&ぼたん.実行()
手続き定義終了
*---------------------------------
(@サブはメイン上のサブフォームオブジェクト名)
という一般手続きを書いておいて
メインのボタンには
------------------------------------
機能名:手続き実行
パラメ:"サブボタン実行","行削除する"
------------------------------------
としています。

もちろんサブフォームのワークエリアには該当する名前の
コマンドボタンを配置し、したい事を設定して置く必要があります。
(この場合のボタン名="行削除する")
これだとメインとサブで対になるコマンドボタンが何個あろうと手続きは1個で済みますし...。

ただ行削除にはいろいろ、!や?があります。
(過去ログに悲しげさんや私のコマントがあります)

それと、メイン&サブについては、発想の転換が必要かも、
例えばサブの方の処理の方が多い場合、当然こちらを
メインにした方が簡単!先入観や見た目に囚われてはいけないなぁ〜...と、あっこれは自戒でした。 (^^;

14011 Re:メイン&サブ アックン 2001/11/17-13:16
記事番号14006へのコメント
松本由紀子さん>
親フォーム上のコマンドボタンでサブフォームの明細行を行削除するわけですね。
これをボタンマクロだけで実現する方法をぼくは知らないので、次のようにしてみました。

1)子フォームにコマンドボタンを作ります。
配置する場所は、ワークエリア(定義画面のフォームの外の白い場所)です。
このコマンドボタンは編集画面に表示しません。

・サブコマンドボタン_1 (←オブジェクト名です。)
機能名:行削除_指定行

2)つぎに親フォーム上にコマンドボタンを作ります。

・コマンドボタン_4 (←オブジェクト名です。)
機能名は設定しません。代わりにイベントを設定します。
オブジェクトの属性(パネル)>イベント(タブ)>「マウス左クリック」をダブルクリック

この操作でイベント定義画面(KEVファイル)が自動的に現れますから、下記のように書きます。
実際に書くのは全部で7行あるうちの6行目「メソッド・・」だけで、他の行は桐が自動的に書いてくれます。

名札 メイン



手続き定義開始 コマンドボタン_4::マウス左クリック(長整数 ・・(略)
 メソッド呼び出し @サブフォーム_1.@サブコマンドボタン_1 .実行( )
手続き定義終了


6行目「@サブフォーム_1」は、メインフォームに配置したサブフォームの実際のオブジェクト名にしてください。
アットマーク(@)とドット(.)の位置に注意しましょう。

これで、サブフォーム明細行の行セレクタをクリックして、1行〜複数行を選択したときだけ、
親フォーム上のコマンドボタンを左クリックして削除できます。

アックン(=^・^=)
14012 Re:メイン&サブ アックン 2001/11/17-14:20
記事番号14010へのコメント
bonitoさん、こんにちは。

>Helpでいうところの
>>サブフォームを指定するとサブフォームに対する機能となる

この記述を読んでみたいのですが、どのヘルプでしょうか?

>(のみと言い切って大丈夫だろうか?他にもあるかも...)
「訂正」もあります。(^^;

>ですから(最初の)質問の最初の答えは、サブフォームを処理
>するボタンはサブフォームに置くのが正しい(?)使い方です
>となります。
>でも格好悪いのでメインに勢ぞろいさせたいと...。

うーん、これは見映えよりも操作性という観点からそうしたいのでしょう。
ぼくならなにがなんでもメインに配置しますから。あ、ぼくの動機は誰も聞いてないし、
どうでもよかったんだ。(^^;

>これだとメインとサブで対になるコマンドボタンが何個
>あろうと手続きは1個で済みますし...。

ここ、うまいですね。
ぼくはボタンマクロ(機能名)書きたくなかったのでイベントプロシージャにしたんだけど、
一般プロシージャを呼び出すわけか。ふむふむ。
これ何か他にも使えるかもしれませんね。覚えておきます。

>ただ行削除にはいろいろ、!や?があります。
というと、具体的にはどんなことでしょうか。
過去ログをざっと読んでみました。
参照整合性の問題とか?
行セレクタがなかったらどうするんだとか?

>例えばサブの方の処理の方が多い場合、当然こちらを
>メインにした方が簡単!先入観や見た目に囚われてはいけ
今回は得意先と売上の関係なんで、このままでいいんじゃないかと。
(これ、突っ込みじゃないです(^^;。)

アックン(=^・^=)

14014 Re:メイン&サブ bonito 2001/11/17-16:12
記事番号14012へのコメント
アックン、やっぱコメントには性格がでますね。
(今後「さん」抜き敬称略でいきます、ごめんなさい)
#14011のコメントは親切で、私(の#14010)も救われました。

>>Helpでいうところの
>>>サブフォームを指定するとサブフォームに対する機能となる
>この記述を読んでみたいのですが、どのヘルプでしょうか?
機能名の選択ダイアログの「詳細」ボタンを押すと下に出て来る解説みたいなやつです Helpじゃなかったっす (^^;
コマンドボタンの機能やらを調べる手段は多分ここくらいでこの事についてはどこかで誰かが苦情を言っていました。
(同感)

>>ただ行削除にはいろいろ、!や?があります。
>というと、具体的にはどんなことでしょうか。
過去ログ#14011からのスレッドを参照ください。
(悲しげさんのコメントにより注目かも...)

例えば、そこでの質問とは逆にこの場合(アックンのも私のも)、
何も手をくわえなければ、サブの行にマークがついていても、いなくても、
メインの削除ボタンは押せる(実行可能な)わけでボタンの見た目は同じなのに、
押せるけど何にもしない時と、押したらなんかする時とが、発生するのは多分うまくないから
もう一工夫する必要が(行削除の場合は)、あるかも知れないという事です。(面倒ちぃが...)

:行セレクタで1行あるいは複数行を選択(セレクタが反転凹)
:した状態を所謂、桐の「選択状態」と区別する為に(私だけ語
:かも知れませんが)、行をマークすると言っておきます。

>今回は得意先と売上の関係なんで、このままでいいんじゃないかと。
あれ〜そこんこと読み飛ばしてました (^^;
すみません>松本さん


14064 Re:メイン&サブ アックン 2001/11/19-11:49
記事番号14014へのコメント
bonitoさん>

>過去ログ#14011からのスレッドを参照ください。
それはこのツリー内ですけど。(^^;
もし過去に悲しげさんが書いていた行セレクタの件でしたら、こういうことかと。
子フォーム明細行で行セレクタを1〜複数個押した状態に出来ますが、
この状態と他オブジェクトのフォーカスは直接関係してないですから、他オブジェクトが編集状態でなければ、
いつでも行削除を実行できるのが桐元来の仕様だと思うんですが。
(マクロボタンに限らず、メニューからも 行削除>指定行 を実行できるはずですから。)

>押したらなんかする時とが、発生するのは多分うまくないから
>もう一工夫する必要が(行削除の場合は)、あるかも知れないと

この点も元来そういう仕様だと思うんですけど。
親フォームに「行削除_指定行」マクロボタンを配置したからそうなったのではなく、
配置先が子フォームでも単独フォームでも同じことですから。

で、その仕様は仕様として、ちなみに bonitoさんがおっしゃるようなマクロボタンを押せたり押せない状態にするにはイベントとなりますが、
まずもって、行セレクタの押下と解除を判断するのが非常に面倒です。
Ctrl+とShift+と左クリック程度ならまだしも、右クリックで選択行を解除したことを判断するとなると、
もうそれでイベントを書く気失せました。(^^;
おそらく実際には、マクロボタンをそれに関係するオブジェクトやら周辺だけを考慮するだけにおさまらないと思います。
親と子の両kevが動くサブフォーム(メイン&サブ)で他のイベントも発生するわけですから、
タイミングを取るのが難しいですね。
そこまでしてかえって動作を不安定にするよりは、現状ですますか、
あるいはいっそのこと子フォームに配置してすます方がいいでしょうね。
子フォームに配置するときは、親と子の境目を消してしまえば見た目もある程度はすっきりしてくると思います。
ただ、マクロボタンをフォーム上方には配置できないでしょう。
この点がデザイン面なり操作性でがまんできないとなると、イベント書くしかないかなと思います。

アックン(=^・^=)
14076 Re:メイン&サブ bonito 2001/11/19-14:35
記事番号14064へのコメント
>>過去ログ#14011からのスレッドを参照ください。
>それはこのツリー内ですけど。(^^;
ひぇ〜 m(_ _)m #6785でした、お許しを...。
つまり単独フォームで行セレクタが配置されていれば
本来(?)、行削除_指定行が1行目に書かれてボタンは
行が選ばれていない時は「使用不可表示」になります
という話でした。

>まずもって、行セレクタの押下と解除を判断するのが非常に面倒です。
ハイ!ですからわたしもそのまま使っています (^^;
行削除イベントというハンドラもないし、行削除には
てこずる事が度々です...

>>例えばサブの方の処理の方が多い場合、当然こちらを
>>メインにした方が簡単!先入観や見た目に囚われてはいけ
>今回は得意先と売上の関係なんで、このままでいいんじゃないかと。
>(これ、突っ込みじゃないです(^^;。)
これから書く事は突っ込みに過剰に反応してる訳じゃないです (^^;
(念のため)

松本さん>
得意先と売上では当然売上のDATAに対する処理の方が圧倒的に多く発生しますよね、仮にメイン&サブにこだわるとして...、
上半分くらい(又は左半分くらい)スペースを開けて売上.tblでメインフォーム(多分伝票形式、グループ項目[年月][得意先コード])をつくります。
開けておいたスペースに収まるように得意先.tblでサブフォームを
(これも趣味としては伝票形式)をつくります。
メインとサブ間のリンクは設定しません、そのかわりサブの方のレコード移動イベントで
*---------------------------
&コード=[得意先コード]
編集表 "売上"
グループ検索{[年月]=&年月,[得意先コード]=&コード}
*---------------------------
とします。
(&年月の値は事前に取得しておく)
又得意先DATAの詳細の編集用にカード形式のフォームを用意しておいて(多重化ON)、
必要に応じてこいつをフォーム呼び出しする。
こんな感じではどうでしょうか?

アックン>
すみません、又余計な事を書いたかも知れません。
でもまぁ...誰かの参考にでもなれば(ならないかも...)


14092 Re:メイン&サブ アックン 2001/11/19-17:56
記事番号14076へのコメント
bonitoさん>

>行が選ばれていない時は「使用不可表示」になります
え? ぼくの単独フォームは使用不可になりません。(^^;
他のフォームでも確かめてみます。

今日は別ツリーで時間とれそうになくて、明日また書きます。
(自宅マシンには桐がないのと、仕事がよる7時頃までで、その間しか書けません。)

>(念のため)
はい。そういうことは承知しておりますんで、好きにやってください。(^^)

アックン(=^・^=)
14126 Re:メイン&サブ アックン 2001/11/20-17:21
記事番号14092へのコメント
bonitoさん>

>>行が選ばれていない時は「使用不可表示」になります
たしかになりました。
ぼくのは機能名の2行目に書いていたからならなかったんですね。(笑)

行セレクタで選択行を解除したら、ボタンがアクティブのままですね。

アックン(=^・^=)

戻る