過去の桐井戸端BBS (桐ver.9)
21633 最終項目テキスト入力からコマンドボタンへ移動したい HERB 2003/07/29-15:39
仕入管理を行おうとフォームを作成しています、Win2000、桐ver.9SP1です。

仕入伝票に記載されている商品コードと社内コードが違います。

商品名も仕入先と社内で使用している商品名も似てはいますが微妙に違います。

まず台帳を作成するために商品台帳入力フォームをカード形式で作成、
社内コードを元に該当商品を商品名項目に表引きし、
仕入先商品名と違う場合は修正、仕入先商品コードを入力。

あるていど台帳ができた時点で仕入明細フォームを作成して入力し始めました。

明細を入力していて商品台帳に登録されていない商品があるときに
商品台帳に新規登録するために明細フォームに商品台帳フォームを
呼び出すためのコマンドボタンを作成。

以下はカード形式商品台帳フォームについての質問です。

以下、過去ログ、「テキストボックスからコマンドボタンへリターンキーによる移動の仕方教えて!」を参考に。
http://www.fuku3.com/~habata/kbbs/kakov8/03392.htm

最終テキストオブジェクトにイベントを作成。

名札 メイン
変数宣言 数値{&OK,&OK2}

手続き定義開始 t商品名::ソース値更新()
 メソッド呼び出し 戻り値=&OK @フォーム.更新モード設定(0)
メソッド呼び出し 戻り値=&OK2 @b新規入力.フォーカス設定()
手続き定義終了

コマンドボタン b新規入力機能名に行追加を設定。

変数の戻り値は以下の通り。

OK,数値,固有,1
OK2,数値,固有,0

変数の戻り値からフォーカスが移っていませんコマンドボタンのオブジェクト属性、
【フォーカス設定可能】は許可にしてあります。

フォームの設定、イベントの記述に見落としがあるのか解決できません、
アドバイスよろしくお願いします。
21634 Re:最終項目テキスト入力からコマンドボタンへ 宮城 2003/07/29-16:49
記事番号21633へのコメント
HERBさん、こんにちは。

V8ですが、適当にフォーム・KEV作って、コピー&ペーストで KEVに貼り付けてなにげに動作しますよ。

「フォーム」は半角に直しましたが・・・。あと、まさかとは思いますが、ボタンの「b」の半角全角とか。
21684 Re:とりあえずフォーカス移動しました HERB 2003/07/31-15:57
記事番号21634へのコメント
宮城さん、HERBです。

>V8ですが、適当にフォーム・KEV作って、コピー&ペーストで KEV
>に貼り付けてなにげに動作しますよ。

入力状態ではコマンドボタンが反転、ボタンを押せない状態で他の
反転していない次行コマンドボタン、機能名、ジャンプ、パラメーターリスト、
次行にフォーカスを設定したところ正常に作動しました。

新規入力ボタンの機能名1に機能名、ジャンプ、パラメーターリスト、
次行を追加、機能名2に機能名、行追加、パラメーターリスト、
"t仕入先商品コード"に変更して試したところ新規入力ボタンに
フォーカスが移動し変数も正常の値1が代入されました。

この方法でよいのか判りませんがとりあえず希望通りの動きになりました。

21691 Re:最終項目テキスト入力からコマンドボタンへ 悲しげ 2003/07/31-19:15
記事番号21633へのコメント
どもっ、HERBさん
#21633をなるべく忠実に再現してみましたら、確かに変ですね。
しかし、次例のようにすると変ではありません(敢えて入力系とは無関係のものと云うことで、機能名「ズームイン」を当てています)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
手続き定義開始 t商品名::ソース値更新()
 メソッド呼び出し 戻り値=&OK,@フォーム.更新モード設定(0)
 メソッド呼び出し 戻り値=&OK2,@bズームイン.フォーカス設定()
手続き定義終了
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
オリジナルの記述では、戻り値とオブジェクト名の間にカンマが抜けて
いたのを補充していますが、そのこと自体は無関係みたいでして(^^;)
変なのは、機能名が「行追加」とか「訂正」である場合とかのようです。
委細は不明ながら、要するにバッティングしているようです。

もうひとつ、#21633を読んで奇異な印象を受けたことは、こう云うことです。
ふつう仕入とかだと、商品名・数量・単価・金額〜必要に応じて
備考などと云った構成になると思います。
で、項目としては初めの方に位置しそうな商品名を入力した時点(ソース値更新)で、
すぐさま次行の新規入力となるとすれば、金額とかはどうするんだろう、と。
と云う訳で、私ならこうするかな、と云う一例を挙げておきます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
手続き定義開始 t備考::ソース値更新()  /*右端的オブジェクト*/
 確認 "連続入力?",&確認
 if(&確認=1)
  メソッド呼び出し @フォーム.更新モード設定(0)
  行追加
  ジャンプ 行番号=最終
  メソッド呼び出し @t商品.フォーカス設定()
  メソッド呼び出し @b訂正.実行()
  *↑ メソッド呼び出し @フォーム.更新モード設定(2) でも可
 end
手続き定義終了
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ps
タイトルは「最終項目」云々となってますね。
21693 Re:最終項目テキスト入力からコマンドボタンへ 悲しげ 2003/07/31-19:31
記事番号21691へのコメント
続きです。
ただし、「ソース値更新」イベントだと、新規行追加時ではなく、
単なる項目訂正の時でも、当該項目で[Enter]したら、新規行追加処理が立ってしまったり、
あるいは新規行追加時でも、左に戻ろうとしただけでも「ソース値更新」イベントが発生してしまうので、
私はこの頃は「キーダウン」イベントで代用するようにしています。
以下にその例を挙げておきます(説明はパスしますが)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,・・・・・・
 var 自動,長整数{&更も},自動,文字列{&focus}
 method @フォーム.更新モード取得(&更も)
 method @フォーム.フォーカスオブジェクト取得(&focus)
 ケース開始
 ケース(&更も=0)
  ・・・・・
 ケース その他 /*訂正モード時*/
  if((&仮想キーコード=13 .and &focus="t備考" .and &止<1 .and &更も<>8)\
    .or (&フラグ=8 .and &仮想キーコード=40\
      .and (&focus="t数量" .or &focus="t単価" .or &focus="t備考")\
      .and &止<1 .and &更も<>8))
   /*フォーカスが右端で、[Enter]押下した時→確定・明細行追加*/
   /*フォーカスが数量〜備考にあって、[Ctrl]+[↓]押下→同上*/
   /*&更も=8は項目訂正モードで、それ以外の時*/
   /*&止=0が連続入力可であることのフラグ、でもかなり苦しい*/
   method @フォーム.更新モード設定(0)
   &処理中止=1
   ジャンプ 行番号=+1
   call 品追加()
  else if(&仮想キーコード=115)
   /*[f・4]で表示モード化した時は連続入力ではない扱いとする*/
   &止=1
  end
 ケース終了
手続き定義終了
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

21708 Re:とりあえずフォーカス移動しました2 HERB 2003/08/01-15:40
記事番号21691へのコメント
悲しげさん、HERBです。

>#21633をなるべく忠実に再現してみましたら、確かに変ですね。
>しかし、次例のようにすると変ではありません(敢えて入力系とは無関
>係のものと云うことで、機能名「ズームイン」を当てています)。

おっしゃるとおり入力系とは関係ないコマンドボタンでは正常にフォーカスが移動します。

>オリジナルの記述では、戻り値とオブジェクト名の間にカンマが抜けて
>いたのを補充していますが、そのこと自体は無関係みたいでして(^^;)

カンマ抜け、誤字、イベント作成時によくやりすその都度エラーがでて何で?
動かないのかみ直しをよくやります。

>変なのは、機能名が「行追加」とか「訂正」である場合とかのようです。
>委細は不明ながら、要するにバッティングしているようです。

私もそうではないかと思い機能名ジャンプを追加して試してみました桐Ver.9
SP1のバグ?もしくわ桐の機能ではできないことでしょうか。

>備考などと云った構成になると思います。で、項目としては初めの方に
>位置しそうな商品名を入力した時点(ソース値更新)で、すぐさま次行
>の新規入力となるとすれば、金額とかはどうするんだろう、と。
>と云う訳で、私ならこうするかな、と云う一例を挙げておきます。

次スレ共々参考にさせて頂きます、ありがとうございます。

なぜ商品名が最終項目に設定したか、販売管理システムは導入しており仕入入力もあるのですが
単価が小数点以下入力できない、仕入商品の分包、混合などがあり
入力しても販売管理と結びつかない、システムは桐ではないことなど仕方ないので
桐で管理しようと始めたところです。

商品名、販売単価など一部データが使えるところから桐に取込商品名など入力しないですむよう
表引きし、仕入先商品名と一部違うときだけ訂正するようにします、
最後の商品名は販売管理システムに入力した商品名で私が伝票を見て入力していますが
実際の商品と合わない可能性もあり台帳ができ次第仕入担当者にチェックしてもらう予定でいます。

また、商品分類毎の売上げ、粗利を求めるために仕入先商品コードと販売管理システムの
商品コードを持つ仕入先商品台帳を作成している途中です、
入力フォームの操作性など検証中で私が操作できても入力担当者が操作しづらいようなら改善していくつもりでおります。

フォーム作成、イベントは判らないことが多くまた質問することがあるかと思いますのでよろしくお願いします。

21710 Re:とりあえずフォーカス移動しました2 悲しげ 2003/08/01-18:24
記事番号21708へのコメント
どもっ、HERBさん

>私もそうではないかと思い機能名ジャンプを追加して試してみました
>桐Ver.9SP1のバグ?もしくわ桐の機能ではできないことでしょうか。

「試してみました」と「桐Ver.9SP1の」の間には正しくは「。」が
入ると思われるので、引用時に改行しておきました。(^^;)
が、このふたつの文章のつながりがよく判りません。本件に関係のない
「機能名ジャンプ」ならうまく動くのか、「機能名ジャンプ」は
本件でも必要であり且つこちらもうまく動かなくて困っているのか?

この部分に関して、V9無印もしくはV8でどうだったかは確認していませんが、
いずれにせよ、明らかにうまく動かないところには固執しない方がいいと思います。
それに、本件のそもそもの操作性も、正直云って、
何だか変だと思うからです。(^^;)
当該ボタンはヘッダ部かフッタ部にあると思うのですが、明細部を連続入力するかどうか
(この時のフォーカスは明細部にある)の判断のために、
ヘッダ・フッタ部のボタンに逐一フォーカスを移し、
もし連続入力するなら再度明細部にフォーカスを移すと云う塩梅で、
明細部とヘッダ・フッタ部にヒョコヒョコと慌しくフォーカスを往来させるのはどうかな?と云うことで。
「確認」コマンドで例示したものは(あまり良い例でもありませんが)、
少なくとも連続入力に際して、フォーカスは明細部のままですから、
違和感が相対的に少ないかも。
(中断)

21742 Re:質問を整理してみました HERB 2003/08/02-17:10
記事番号21710へのコメント
悲しげさん、HERBです。

私自身混乱してきたのでいくつか整理させて下さい。

当該フォームはカード型フォームで、ワンタッチフォーム機能で表示したフォームをひな形として保存しました。

カード型フォーム最終項目入力後エンターキーを押してもフォーカスは移動せず、
モードも入力状態のままです。

新規登録の商品点数が2点以上の時、最終項目を入力後マウスを使わずに
エンターキーのみで続けて入力できるフォームにしたいと考えイベントを作成しています。

>「試してみました」と「桐Ver.9SP1の」の間には正しくは「。」が
>入ると思われるので、引用時に改行しておきました。(^^;)

お手数お掛けします、読み直しをしているのですが。

>が、このふたつの文章のつながりがよく判りません。本件に関係の
>ない「機能名ジャンプ」ならうまく動くのか、「機能名ジャンプ」
>は本件でも必要であり且つこちらもうまく動かなくて困っているの
>か?

試してみて「機能名ジャンプ」を使ったらうまく動いたにすぎません。

>当該ボタンはヘッダ部かフッタ部にあると思うのですが、明細部を
>連続入力するかどうか(この時のフォーカスは明細部にある)の判
>断のために、ヘッダ・フッタ部のボタンに逐一フォーカスを移し、
>もし連続入力するなら再度明細部にフォーカスを移すと云う塩梅で、

カード型フォームのフッタ部にコマンドボタンを作成しました。

>「確認」コマンドで例示したものは(あまり良い例でもありません
>が)、少なくとも連続入力に際して、フォーカスは明細部のままで
>すから、違和感が相対的に少ないかも。

フォーム、イベント作成についての基本がよくわかっていないまま見よう見まねで作成しています。

最初に書いておくべきでした連続入力する場合はできる限りマウスを使わず、
エンターキーで操作できるようにしたいのが私の希望です。

素人考えですが該当フォームをメニューフォームのように編集対象表を
作らずすべてのテキストオブジェクトを変数に代入し、最終項目入力後
代入した変数を使って行追加コマンドで表に追加、
すべてのテキストオブジェクトをクリアするといった方法もありでしょうか。

他の方法でもっとよい方法などありましたらよろしくお願いします。

21747 完全に外しました<(_ _)> 悲しげ 2003/08/02-19:10
記事番号21742へのコメント
どもっ、HERBさん
これって、カードwfm上でのことだったのですね。(^^;)
仕入の明細云々と云うことで、てっきり伝票or一覧表wfm上でのことと
勘違いしていました。
と云うことで、私の投稿は全く無視して下さいますよう。<(_ _)>

21749 Re:完全に外しました<(_ _)> 悲しげ 2003/08/02-20:15
記事番号21747へのコメント
カードwfmで試してみました。(^^;)
カードの方でも#21633で仰せの現象(「新規入力」ボタンにフォーカスが移っていない)を、
私は再現することができました。
なお、V8の宮城さんは#21634で「なにげに動作する」と仰るので、
私もV8sp7で試してみましたが、やはり同じ現象に突き当たりました。(?_?)

以前にも書いたことがありますが、しばしば「更新モード設定」メソッドが
利かない(特に値が確定しない)場合があるので、そのような時は、
コマンドボタンの機能「表示−確定する」を利用するとうまく行くことがあります。(これはV8〜V9共通)
今回の場合は、訂正中のモードから「更新モード設定」メソッド→コマンドボタンの機能
「行追加」の流れが寸断されているようです。
そこで、上記の応用として次のように試してみたら、何とかうまく行ったように見えました。

手続き定義開始 t商品名::ソース値更新()
 *メソッド呼び出し 戻り値=&OK,@フォーム.更新モード設定(0)
 メソッド呼び出し 戻り値=&OK,@b表示確定.実行()
 メソッド呼び出し 戻り値=&OK2,@b新規入力.フォーカス設定()
手続き定義終了

※「b表示確定」ボタン(ワークスペースまたは枠内のどちらにでも)
  機能=表示  同パラ=確定する

ps:
一寸試してみた感じでは、連続追加入力の場合だと操作性はまぁまぁかもしれませんが、
連続入力しない場合は[Esc]キーが利かず、矢印キーでボタンからフォーカスを離さなければならない点に、
少々違和感が残りました。(^^;)

ps2
>最初に書いておくべきでした連続入力する場合はできる限りマウスを使
>わず、エンターキーで操作できるようにしたいのが私の希望です。

私は「キーダウン」イベント命になっています。(^^;)
近頃の悲しげ作品の「統一仕様」(^^;)では、新規追加はともかく[Tab]キ
ー押下としていたりします。(^^;)

21756 Re:ありがとうございました。 HERB 2003/08/03-14:31
記事番号21749へのコメント
悲しげさん、HERBです。

>以前にも書いたことがありますが、しばしば「更新モード設定」メソッ
>ドが利かない(特に値が確定しない)場合があるので、そのような時は、
中略
>手続き定義開始 t商品名::ソース値更新()
> *メソッド呼び出し 戻り値=&OK,@フォーム.更新モード設定(0)
> メソッド呼び出し 戻り値=&OK,@b表示確定.実行()
> メソッド呼び出し 戻り値=&OK2,@b新規入力.フォーカス設定()
>手続き定義終了

上記イベント作成してみます。

>>ps:
>一寸試してみた感じでは、連続追加入力の場合だと操作性はまぁまぁか
>もしれませんが、連続入力しない場合は[Esc]キーが利かず、矢印キーで
>ボタンからフォーカスを離さなければならない点に、少々違和感が残り
>ました。(^^;)

操作性については入力担当者と相談して操作しにくいようなら変更します。

>ps2
>>最初に書いておくべきでした連続入力する場合はできる限りマウスを使
>>わず、エンターキーで操作できるようにしたいのが私の希望です。
>
>私は「キーダウン」イベント命になっています。(^^;)
>近頃の悲しげ作品の「統一仕様」(^^;)では、新規追加はともかく[Tab]キ
>ー押下としていたりします。(^^;)

「統一仕様」は大事ですね、私が過去に作成したイベントを流用するときなど
仕様がバラバラなので苦労します。

また別件で質問することもあるかと思います、よろしくお願いします。

ありがとうございました。

戻る