過去の桐井戸端BBS (桐ver.8)
28809 フォーム上のある項目に1〜5の数字が入るとエンターキーを押さなくても次の項目に移動するようにしたい まさひろ 2005/01/26-07:57
お願いいたします。桐Ver8です。
フォーム上で、ある項目に1〜5の数字が入るとエンターキーを押さなくても、
次の項目にカーソルが移動するようにしたいのですが、いくら考えても上手くいきません。
イベントの書き方を教えて下さい。
贅沢をいえば6以上の数が入ると、それが消去されカーソル移動せずに次の数字入力を待っているようにしたいのです。
よろしくお願いします。
28810 Re:項目間移動 宮城 2005/01/26-09:39
記事番号28809へのコメント
まさひろさん、こんにちは。

こんなんで一応動くようです。

手続き定義開始 テキスト_1::編集文字列変更()
 メソッド呼び出し 編集文字列取得(&あ文字列)
 &あ文字列数値=#数値(&あ文字列)
 ケース開始
  ケース(&あ文字列数値>=1 .and &あ文字列数値<=5)
   メソッド呼び出し @テキスト_2.フォーカス設定()
  ケース(&あ文字列数値>5)
   メソッド呼び出し 編集文字列設定("")
 ケース終了
手続き定義終了

フォームにテキストボックス二つ配置。一つ目のソースは&あ(数値)、
二つ目はなにか適当に。変数も適宜宣言しておいてください。


28811 Re:項目間移動 宮城 2005/01/26-09:53
記事番号28810へのコメント
こうすべきでしょうね。

 ケース開始
  ケース(&あ文字列数値>=1 .and &あ文字列数値<=5)
   メソッド呼び出し @テキスト_2.フォーカス設定()
  ケース その他
   メソッド呼び出し 編集文字列設定("")
 ケース終了

28813 Re:項目間移動 まさひろ 2005/01/26-18:08
記事番号28811へのコメント
宮城さんさっそくのご教示ありがとうございました。感激です。
家に帰って試してみます。またよろしくお願い致します。


28815 Re:項目間移動 悲しげ 2005/01/26-21:13
記事番号28810へのコメント
どもっ、宮城さん

動いているところに、こんなこと云うのはヤボですが、

>手続き定義開始 テキスト_1::編集文字列変更()
> ・・・・
>   メソッド呼び出し @テキスト_2.フォーカス設定()

以前にたゆーさんのとこでも書いたことですけど・・・・
ヘルプによりますと、編集文字列変更イベントではフォーカスの移動はできないことになっております。
で、このイベントの主旨からすると、確かに当該テキストなりの編集文字列を変更している真っ最中に
フォーカスが他テキスト等に移動してしまっては、
桐様の方でレレレのオッサン状態になってしまいそうな感なきにしもあらずではありますし。
が、実はヘルプの記載に反して、当該イベント最中にフォーカス移動可能なことも承知しています。(^^;)
この辺りをどう考えるか、桐のひとつの「穴」であるから、
将来的にこの穴が塞がれてしまう(ヘルプどおりフォーカス移動不可に仕様変更される)のか、
あるいは当面は支障ないので「穴」とはしないで、ヘルプの方が実態に合わせて書き換えられるのか、
ちょっと微妙なところがあるような気がします。

私なら、ちょいと不確定要素があるので編集文字列変更イベントではフォーカス移動は使わないかな?
あ、まだv9ですが(v9-2004は購入済だけどまだインストしてない)。

28816 Re:編集文字列変更イベント 悲しげ 2005/01/26-21:25
記事番号28815へのコメント
参考までに

>以前にたゆーさんのとこでも書いたことですけど・・・・

たゆーさんとこの過去ログNo.95です。

28817 Re:編集文字列変更イベント ONnoji 2005/01/26-22:34
記事番号28816へのコメント
悲しげさん、こんにちは。
お久しぶりです。(^^v

私もデジャブというかデジャビューです。

私はあんまり気にしなくてもいいのでは…と思っておりますけれど。

28818 Re:項目間移動 佐田 守弘 2005/01/26-22:51
記事番号28815へのコメント
まさひろさん
私も悲しげさんのコメントとほぼ同意見で、仮にできたとしても、
項目値の編集中にフォーカスを移動する事は、好ましくないだろうと思います。
なぜかと言うと、表示モードの時には、データベースを操作するエンジンに制御があるのに対して、
項目値を編集しているモードの時には、一種のエディタに制御があるためです。
(出張中に異動辞令が出されて机が動かされたらいやでしょうから。)

もし仮に皆さんが書かれている様に編集文字列変更イベントで行うとしたら、
表示モードに戻してから、フォーカスを移動するのが筋なのだろうと思います。

●数字キー押下で入力
もしご希望の様に1〜5の数字キーを押したら、それだけで項目値に入力を終えるには、
キー入力イベントを使うのが筋ではないかと思います。
詳しくはヘルプを見て頂くとして、簡単にいえば、キーを押している間繰り返して発生するイベントです。

イベントハンドラの引き数に指定する変数「&文字キー」に、
押されたキーの文字コードが格納されます。ですからこの値を調べて、数字の1〜5に相当するコードであったら、
項目値に値を代入し、次の項目にフォーカスを移動します。

ポイントとしては、
・項目の編集中は動作しない
入力するオブジェクトに移動したら、現在のモードを調べておいてから、
一度表示モードに戻します。そしてキー入力を終えて、次のフォーカスに移動した後、
再び元のモード(ないし類似のモード)に戻します。

・キー入力イベントは連続して発生する
1つのキー入力を終えたら、その後キー入力イベントを無効にする必要があるでしょう。

従って、結構面倒なイベントハンドラを記述する必要があると思います
が、多分この方法で行うのが良いかと思います。

佐田守弘(KS-00119)
28819 Re:項目間移動 まさひろ 2005/01/27-07:35
記事番号28818へのコメント
宮城さん、悲しげさん、ONnojiさん、佐田さん様々なご教示ありがとうございました。
大変感激です。いろいろと試してみます。本当にありがとうございました。
今後ともよろしくお願いいたします。
28820 Re:項目間移動 宮城 2005/01/27-13:00
記事番号28819へのコメント
悲しげさん、ONnojiさん、佐田さん、まさひろさん、ずいぶんと世の中から遅れていることを露呈してしまったようですね。がっくり。

キー関係イベントでやってみました。

キー入力は「編集中は発生しません」そうなので、「キーアップ」。
これなら一回だけのようだし・・・。

手続き定義開始 フォーム::キーアップ(長整数 &仮想キーコード)
 メソッド呼び出し @フォーム.フォーカスオブジェクト取得(&オブジェクト名)
 ケース開始
  ケース(&オブジェクト名="テキスト_1")
   ケース開始
    ケース(&仮想キーコード>=49 .and &仮想キーコード<=53)
     メソッド呼び出し @テキスト_2.フォーカス設定()
    ケース(&仮想キーコード>=97 .and &仮想キーコード<=101)
     メソッド呼び出し @テキスト_2.フォーカス設定()
    ケース その他
     メソッド呼び出し @テキスト_1.編集文字列設定("")
   ケース終了
 ケース終了
手続き定義終了

これも「こんなんで一応動く」ことしか確認していません。

28821 Re:項目間移動 ONnoji 2005/01/27-13:13
記事番号28820へのコメント
宮城さん、こんにちは。

----------------------------------------
[編集文字列変更]イベント → タイマー1予約

<<<<<<<<<< インターバル >>>>>>>>>

[タイマー1]イベントで[フォーカス設定]メソッド
----------------------------------------

というのが本筋のような、そうでもないような…(^^ゞ

しかし、[タイマー]イベントは慣れていないと難しそうだし、
うっかり、インターバルを1/100秒にしたりすると、ひどい事になりますので、

現行の桐で動いているのなら、それはそれでOKじゃないでしょうかね。
[編集文字列変更]イベントから直行しても、
当時トレースした限りでは、ちゃんと後始末されてから、
フォーカスが移動していたと記憶しています。

28822 Re:項目間移動 アックン 2005/01/27-17:16
記事番号28815へのコメント
こんにちは>おる
話題になっている編集文字列変更イベント例を、アップしました。

フォーカス設定だけでなく、更新モード設定も使えるみたいですね。
(コメント行にしてあります。)

スレ立てた人> (ハンドル失念ごめんなさい)
Enter押し下げる場合はどうすっかという例も kevに記述しました。
(「入力後」「ソース値更新」各イベントを組み合わます。)

宮城さん>
V8だと読めないことにアップ後に気づいたので、ここにkevをコピペしとくね。

項目:[A]整数 [B]文字列 [C]文字列

以下kev

名札 メイン


*____________________\
* tA::編集文字列変更 Enter押下しない場合は編集文字列変更イベントのみ使う
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc tA::編集文字列変更()
method 編集文字列取得( &STR )
if( #num( &STR )>0 .and#num( &STR )<6 )
method @tC.フォーカス設定() /* マニュアルでは× */
* method @フォーム.更新モード設定( 0 ) /* マニュアルでは× */
else
method 編集文字列設定( "" )
end
end
*___________________\
* tA::入力後 Enter押下する場合はソース値更新イベントと組み合わせる
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc tA::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長
整数 &入力継続)
if( &モード=1 )
if( #set( 秒 , #num( &編集文字列 ) )=0 .or#num( &編集文字列 )>5 )
&編集文字列 = ""
&入力継続 = 1
end
end
end
*___________________\
* tA::ソース値更新 Enter押下する場合は入力後イベントと組み合わせる
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc tA::ソース値更新()
if( &秒>0 .and&秒<6 )
method @tC.フォーカス設定()
end
end

28823 Re:項目間移動 ONnoji 2005/01/27-17:50
記事番号28821へのコメント
宮城さん、こんにちは。

----------------------------------------
[編集文字列変更]イベント → [実行]メソッド

<<<<<<<<<< インターバル >>>>>>>>>

コマンドボタンの機能で、フォーカス設定
----------------------------------------

実際に試していませんが、こんなのも出来るかも…

これでは、薮蛇になってしまいますね。(^^ゞ


28824 Re:項目間移動 アックン 2005/01/27-17:59
記事番号28822へのコメント
kevの字下げが半角のままだった。(^^;アハハ

宮城さんのキーアップを使う方法でいいんじゃないかなと思います。
編集文字列変更が現状で仕様に確信が持てないわけで、
このイベントに続く入力後・ソース値更新と矛盾する記述だと整合とれないんじゃないかなとか、
グループ項目だとどうなるかとか、まだ検証してみたいですね。

なんで×なんや?、とメーカーに誰か聞いてみてちょ。

アックン(=^・^=)
28825 Re:項目間移動 宮城 2005/01/27-18:05
記事番号28822へのコメント
アックン、ご配慮かたじけなく。

ただ・・・、このばやい、「入力後」「ソース値更新」イベントは発生する間もなく
「編集文字列変更」イベントに斬られてしまうような気がいたしますが・・・。(^^;;

28826 Re:項目間移動 アックン 2005/01/27-18:43
記事番号28825へのコメント
宮城さん、こんばんは。ごめん。書き忘れてました。(^^;

1)
アップしたフォームでは、イベントを編集文字列変更だけ使うように初期設定しています。
入力後+ソース値更新は切ってます。
入力後+ソース値更新を使うときは、編集文字列変更を切ってください。>ALL

2)
ぼくのバージョンは、V9-2005(v9-2004sp2)です。

3)
キーアップはフォーム全体に係るイベントですから、
テキストボックスオブジェクト1個だけのために使うのを好まない人もいると思います。
とはいえ編集文字列変更以外で使えるのはキーアップかキーダウンしかないようです。
その人の好みのを使えばいいんじゃないかなあ・・・・。(^^;

4)
Enter押下なしでこういうことやりたい場面って、桐でゲーム開発するくらいしか思いつかないなあ。
気持ちは分かるんですが、もしふつうの仕事のデータ入力なんかだったら、
Enter押すのが確実でいいと思うんだけどなあ。
(でもなんでもトライだよ! >スレ立てた人)

アックン(=^・^=)
28828 Re:項目間移動 アックン 2005/01/27-19:41
記事番号28825へのコメント
宮城さん
イベントが斬られるって、発生しない、スルーするってこと?
仮に編集文字列変更+入力後+ソース値変更のみっつともONにしたときの動作をちょっとトレースしてみましたよ。

・値が 1〜5 以外のとき
 編集文字列変更 開始
 編集文字列変更 終了

この場合は編集文字列変更イベントだけ発生しました。
編集中の文字列を "" にして編集を継続していますから、
入力後イベントにまだ行かないだけでしょうね。

・値が 1〜5 のとき
 編集文字列変更 開始
  入力後 開始
  入力後 終了
  ソース値変更 開始
  ソース値変更 終了
 編集文字列変更 終了

このように、編集文字列変更にはさまれる形でネストになりました。
ONnojiさんが書いていたのはこれでしょうか。

さて、コマンドをあちこち変更するとどうなるかです。
悲しげさんや僕が懸念したのは、コマンドの記述と動作に整合性がとれるんだろうかという点です。
検証してみると面白いと思います。誰かやってちょ。(^^;
28829 Re:項目間移動 宮城 2005/01/27-20:14
記事番号28828へのコメント
チェック入ってなかったのに気がつきませんでした。

if( #set( 秒 , #num( &編集文字列 ) )=0 .or#num( &編集文字列 )>5 )

これって正しい表記だったんですねぇ。&秒に編集文字列放り込んでおいて比較をする。

# 下限も大小比較のほうがいいと思いますけど。

> Enter押下なしでこういうことやりたい場面って、桐でゲーム開発するくらい
> しか思いつかないなあ。
> 気持ちは分かるんですが、もしふつうの仕事のデータ入力なんかだったら、
> Enter押すのが確実でいいと思うんだけどなあ。

お客目の前で、ワンタッチでも減らしたいってニーズでしょうね。
確かにミスったとき危ういです。
28834 Re:項目間移動 まさひろ 2005/01/28-09:58
記事番号28829へのコメント
皆さん、いろいろなご教示本当にありがとうございました。
>
>> Enter押下なしでこういうことやりたい場面って、桐でゲーム開発するくらい
>> しか思いつかないなあ。
>> 気持ちは分かるんですが、もしふつうの仕事のデータ入力なんかだったら、
>> Enter押すのが確実でいいと思うんだけどなあ。
>
>お客目の前で、ワンタッチでも減らしたいってニーズでしょうね。
>確かにミスったとき危ういです。

ちょっと昔、成績太郎というソフトがありました。生徒の成績の大部分は2桁であるので
その2桁を入力するとカーソルが移動するというものでした。(1桁や満点(*を入力)は
リターンキーが必要) 邪道であるという人もいましたが、
一人で入力する場合はとても楽で感動した記憶があります。
その他にも類似場面がたくさんありましたので、
今回の投稿に至ったわけです。いろいろとありがとうございました。
28836 Re:項目間移動 大野達郎 2005/01/28-11:02
記事番号28829へのコメント
まさひろさん、宮城さん、悲しげさん、ONnojiさん、佐田 守弘さん、アックンさん、
こんにちは。
いつもお世話になっております。

> 、「入力後」「ソース値更新」イベントは発生する間もなく
> 「編集文字列変更」イベントに斬られてしまうような・・・

これについて少しテストを行ってみました。

*アックンさんのイベントを元にしてます。
*フォームにはtD のテキストボックスを追加してあります。
proc tA::編集文字列変更()
 method @tC.フォーカス設定() /* 命令1 */
 項目値代入 [A] = 10     /* 命令2 */
 method 編集文字列設定( "" ) /* 命令3 */
end

proc tA::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
 項目値代入 [C] = "4"    /* 命令4 */
end

proc tA::ソース値更新()
 項目値代入 [B] = "3"    /* 命令5 */
 method @tD.フォーカス設定() /* 命令6 */
end

大雑把に書いてこのような命令を実行すると
命令1→4→5→2→3
の順で実行されました。
命令3はエラーにて停止します。
命令6は実行されなかったのかフォーカスはtD には移動しませんでした。
(命令6に関しては命令3をコメントアウトしても同様です)

この様子からして、編集文字列変更にてフォーカス設定する場合、
編集文字列変更内で全て記述(項目の代入とか)した方が無難なような気がします。


Enter キーは小指か薬指にて押す為、指の疲れも早いこともあり
Enter キーを押さないフォームはよく使用します。
入力ミスが少ないオペレーターの方ほど好評で、
入力効率も入力文字数の少ないデータを繰り返し入力する業務ほど効率が上がります。
ミスの入力をした時の為に、"-" (マイナスキー) とかで
前の項目にフォーカスを戻すイベントも記述しておくと良いようです。
28837 Re:項目間移動 ONnoji 2005/01/28-12:18
記事番号28836へのコメント
大野達郎さん、こんにちは。

こちらでも試してみました。
確かにエラーになりますね。

以下は桐ver.9 の sp の違いが少しあるかもしれませんが、
当方で試したトレース結果です。

環境 桐ver.9 無印初期版 Windows NT4.0

■イベント( .kev )
*--------------------------------------------*
名札 メイン



*アックンさんのイベントを元にしてます。
*フォームにはtD のテキストボックスを追加してあります。
proc tA::編集文字列変更()

 トレース出力 "begin method @tC.フォーカス設定() /* 命令1 */"
 method @tC.フォーカス設定() /* 命令1 */
 トレース出力 "end method @tC.フォーカス設定() /* 命令1 */"

 トレース出力 "begin 項目値代入 [A] = 10     /* 命令2 */"
 項目値代入 [A] = 10     /* 命令2 */
 トレース出力 "end 項目値代入 [A] = 10     /* 命令2 */"

 トレース出力 "begin method 編集文字列設定( "" ) /* 命令3 */"
 method 編集文字列設定( "" ) /* 命令3 */
 トレース出力 "end method 編集文字列設定( "" ) /* 命令3 */"

end

proc tA::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
 トレース出力 "begin 項目値代入 [C] = "4"    /* 命令4 */"
 項目値代入 [C] = "4"    /* 命令4 */
 トレース出力 "end 項目値代入 [C] = "4"    /* 命令4 */"
end

手続き定義開始 tA::ソース値更新()

 トレース出力 "begin 項目値代入 [B] = "3"    /* 命令5 */"
 項目値代入 [B] = "3"    /* 命令5 */
 トレース出力 "end 項目値代入 [B] = "3"    /* 命令5 */"

 トレース出力 "begin method @tD.フォーカス設定() /* 命令6 */"
 method @tD.フォーカス設定() /* 命令6 */
 トレース出力 "end method @tD.フォーカス設定() /* 命令6 */"

手続き定義終了
*--------------------------------------------*

■トレース結果(拙作の清書ユーティリティで整形)

┌when "tA::編集文字列変更( )"を実行開始しました

│ :begin method @tC.フォーカス設定() /* 命令1 */

│┌when "tA::入力後("5545",1,0)"を実行開始しました
││
││ :begin 項目値代入 [C] = 4    /* 命令4 */
││ :end 項目値代入 [C] = 4    /* 命令4 */
││
│└end

│┌when "tA::ソース値更新( )"を実行開始しました
││
││ :begin 項目値代入 [B] = 3    /* 命令5 */
││ :end 項目値代入 [B] = 3    /* 命令5 */
││ :begin method @tD.フォーカス設定() /* 命令6 */
││ :end method @tD.フォーカス設定() /* 命令6 */
││
│└end

│ :end method @tC.フォーカス設定() /* 命令1 */
│ :begin 項目値代入 [A] = 10     /* 命令2 */
 ! error: trace_reform
 エラー :KU1069:対象表が更新中またはグループ操作中ではないためこのコマンドは使用できません
(J:\sample\test\modifyフォーカス移動.kev 14行目)

確かにエラーになりました〜。(^^ゞ


28838 Re:項目間移動 ONnoji 2005/01/28-12:38
記事番号28837へのコメント
大野達郎さん、こんにちは。

method @tC.フォーカス設定() を実行する位置を変更すると…
エラーしなくなりました。

*---------------------------*
proc tA::編集文字列変更()

 *トレース出力 "begin method @tC.フォーカス設定() /* 命令1 */"
 *method @tC.フォーカス設定() /* 命令1 */
 *トレース出力 "end method @tC.フォーカス設定() /* 命令1 */"

 トレース出力 "begin 項目値代入 [A] = 10     /* 命令2 */"
 項目値代入 [A] = 10     /* 命令2 */
 トレース出力 "end 項目値代入 [A] = 10     /* 命令2 */"

 トレース出力 "begin method 編集文字列設定( "" ) /* 命令3 */"
 method 編集文字列設定( "" ) /* 命令3 */
 トレース出力 "end method 編集文字列設定( "" ) /* 命令3 */"

 トレース出力 "begin method @tC.フォーカス設定() /* 命令1’ */"
 method @tC.フォーカス設定() /* 命令1’ */
 トレース出力 "end method @tC.フォーカス設定() /* 命令1’ */"

end
*---------------------------*

■トレース結果(拙作の清書ユーティリティで整形)

┌when "tA::編集文字列変更( )"を実行開始しました

│ :begin 項目値代入 [A] = 10     /* 命令2 */
│ :end 項目値代入 [A] = 10     /* 命令2 */
│ :begin method 編集文字列設定( " ) /* 命令3 */
│ :end method 編集文字列設定( " ) /* 命令3 */
│ :begin method @tC.フォーカス設定() /* 命令1’ */

│┌when "tA::入力後(,1,0)"を実行開始しました
││
││ :begin 項目値代入 [C] = 4    /* 命令4 */
││ :end 項目値代入 [C] = 4    /* 命令4 */
││
│└end

│┌when "tA::ソース値更新( )"を実行開始しました
││
││ :begin 項目値代入 [B] = 3    /* 命令5 */
││ :end 項目値代入 [B] = 3    /* 命令5 */
││ :begin method @tD.フォーカス設定() /* 命令6 */
││ :end method @tD.フォーカス設定() /* 命令6 */
││
│└end

│ :end method @tC.フォーカス設定() /* 命令1’ */

└end

28839 Re:項目間移動 ONnoji 2005/01/28-13:00
記事番号28838へのコメント
>method @tC.フォーカス設定() を実行する位置を変更すると…
>エラーしなくなりました。

おそらく以下のように実行されるのでしょうね。

以下の★★を参照してください。

■トレース結果(拙作の清書ユーティリティで整形)

┌when "tA::編集文字列変更( )"を実行開始しました

│ :begin 項目値代入 [A] = 10     /* 命令2 */
│ :end 項目値代入 [A] = 10     /* 命令2 */
│ :begin method 編集文字列設定( " ) /* 命令3 */
│ :end method 編集文字列設定( " ) /* 命令3 */
│ :begin method @tC.フォーカス設定() /* 命令1’ */
│ ★★ ここで命令1’が実行された

│ ★★ 後始末をするためにイベントが発生した
│┌when "tA::入力後(,1,0)"を実行開始しました
││
││ :begin 項目値代入 [C] = 4    /* 命令4 */
││ :end 項目値代入 [C] = 4    /* 命令4 */
││
│└end

│┌when "tA::ソース値更新( )"を実行開始しました
││
││ :begin 項目値代入 [B] = 3    /* 命令5 */
││ :end 項目値代入 [B] = 3    /* 命令5 */
││ :begin method @tD.フォーカス設定() /* 命令6 */
││ :end method @tD.フォーカス設定() /* 命令6 */
││
│└end

│ ★★ まだ編集文字列変更イベントが実行されている
│ :end method @tC.フォーカス設定() /* 命令1’ */

└end

28840 Re:項目間移動 ONnoji 2005/01/28-15:19
記事番号28839へのコメント
(一応)最後の実験です。(^^ゞ

tC と tD にも
[入力前][編集開始][編集文字列変更][入力後][ソース値更新]イベントを有効にして、
それぞれのイベントハンドラを用意して、トレースすると以下のようになりました。

[フォーカス設定]メソッドを記述した行以降で、
何かを実行すると、収拾がつかなくなるような…そんな気がします。

また、適当に最適化されているらしく、
tD の[入力前][編集開始][編集文字列変更][入力後][ソース値更新]イベントが発生していないように見うけられます。

いずれにしても、
いったい誰が、このような多重発生イベントを正確に予想して、
イベントハンドラの内容を正しく書けるでしょうか???
そんな気がしました。

[編集文字列変更]イベントで[フォーカス設定]は出来るけれど、
とても複雑になるからやらない方がいいと…
そんな気もしました。

タラレバですが、ひょっとして、マニュアルの記述は教育的指導なのでしょうかね。

┌when "tA::編集文字列変更( )"を実行開始しました

│ :begin 項目値代入 [A] = 10     /* 命令2 */
│ :end 項目値代入 [A] = 10     /* 命令2 */
│ :begin method 編集文字列設定( " ) /* 命令3 */
│ :end method 編集文字列設定( " ) /* 命令3 */
│ :begin method @tC.フォーカス設定() /* 命令1’ */

│┌when "tA::入力後(,1,0)"を実行開始しました
││
││ :begin 項目値代入 [C] = "4"    /* 命令4 */
││ :end 項目値代入 [C] = "4"    /* 命令4 */
││
│└end

│┌when "tA::ソース値更新( )"を実行開始しました
││
││ :begin 項目値代入 [B] = 3    /* 命令5 */
││ :end 項目値代入 [B] = 3    /* 命令5 */
││ :begin method @tD.フォーカス設定() /* 命令6 */
││
││┌when "tD::フォーカス取得("tA")"を実行開始しました
││└end
││
││ :end method @tD.フォーカス設定() /* 命令6 */
││
│└end

│┌when "tC::フォーカス取得("tD")"を実行開始しました
│└end

│┌when "tC::入力前("4")"を実行開始しました
│└end

│┌when "tC::編集開始( )"を実行開始しました
│└end

│ ★★ これ以降でまだ何かすると更に収拾がつかなくなるような…
│ :end method @tC.フォーカス設定() /* 命令1’ */

└end

それでは、皆様失礼します。(^^)/~~~


28841 Re:項目間移動 アックン 2005/01/28-16:25
記事番号28840へのコメント
大野達郎さん、ONnojiさん> 検証お疲れさまでした。

わかりやすい解析ありがとうございました。

つうわけでもしキーアップ使うとしても、値が2桁以上だと面倒そうですね・・・・。(^^;

宮城さん>
#numや#setのようにね、値だけをそのまま返す関数じゃったらね、使えるんよー。(^^)

アックン(=^・^=)
28842 Re:項目間移動 ONnoji 2005/01/28-17:14
記事番号28841へのコメント
>大野達郎さん、ONnojiさん> 検証お疲れさまでした。
>わかりやすい解析ありがとうございました。

アックンさん、こんにちは。

どういたしまして、これはご丁寧にどうもです。(^^ゞ

なお、桐のバージョンと sp によって、
多重発生イベントのネストが微妙に異なることがありますよ。
くれぐれも、ご注意ください。>ALL

それでは、失礼します。(^^)/~~~

戻る