| 2023/12/22(Fri) 14:42:16 編集(投稿者) 2023/12/22(Fri) 10:35:04 編集(投稿者) 2023/12/21(Thu) 21:26:43 編集(投稿者)
> 桐10S Windows10 > > フォームで入力途中にESCで入力を中止した時に > 指定のコマンドボタンにフォーカスを移動させたいのですが
フォームのテキストボックスにキャレットがある時には、[テキストボックスのエディタ]の中に居ます。
この[テキストボックスのエディタ]とはいわゆる入力用のバッファ(メモリ)の事です。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
なので、[テキストボックスのエディタ]に進入している時に発生する[入力後]イベントで他のオブジェクトへフォーカスを移動することは禁止されています。
つまり、[入力後]イベントが終了してから、他のオブジェクトへフォーカスを移動させてちょうだいね、ということです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ ◇ ◇ ◇ ◇
私も[実行コマンド:ESCキー]が簡便で面倒くさくないのでお勧めします。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
ただし、テキストボックスにキャレットがある時には、ESCキーを2度押す必要がありますね。
1度めは、[テキストボックスのエディタ]から脱出するために、
そして2度めは、[実行コマンド:ESCキー]の設定のために。
これ位ならば、普通は[この仕様で良し!]じゃないでしょうか????
◇ ◇ ◇ ◇
それでも、どうしてもというのであればサンプルを添付しますので参考にしてください。
例によってサンプルは数日を目途に削除しますのでダウンロードはお早めに願います。
なお、サンプルでは時限式タイマーを使用しています。
時限式タイマーに関しては拙作webページを参考にしてください。
こちら ↓ 桐の釣魚大全のトップ > フォームアプリケーション教書 第1部 11 [タイマー]イベントの動的セット http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section11
■ダイアログボックス.WFX
フォーム ├ ファミリ ├ ワークスペース │ └ cmdフォーカス移動 ├ フォーム操作バー ├ フォームヘッダ部 │ └ tタイトル ├ フォーム明細部 │ ├ テキスト_8 │ │ └ ラベル_9 │ ├ テキスト_9 │ │ └ ラベル_10 │ └ ラベル_11 └ フォームフッタ部 ├ cmdOK └ cmdキャンセル
オブジェクト名: cmdフォーカス移動 標題 : cmdフォーカス移動
機能名 機能パラメータリスト 1 フォーカス移動 "cmdキャンセル" 2 なし 3 なし 4 なし
■ダイアログボックス.kex
名札 メイン
*
手続き定義開始 フォーム::タイマー1() 変数宣言 自動,文字列{ &objectName } 変数宣言 自動,整数 { &return }
&objectName = "フォーム" オブジェクト操作 &objectName{タイマー1 = 0 } /* 時限式タイマーなので直ちに停止します */
メソッド呼び出し 戻り値 = &return, @cmdキャンセル.フォーカス設定() **戻り値 意味 ** 1 フォーカスを移した。 ** 0 フォーカスを移せなかった。 **-1 フォーカス設定できないハンドラ内で実行した トレース出力 _&return
手続き定義終了
手続き定義開始 テキスト_9::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続) 変数宣言 自動,文字列{ &objectName } 変数宣言 自動,整数 { &interval = 10 } /* 単位は1/100秒 ただし、0.1秒以下にはしないこと */ 変数宣言 自動,整数 { &return }
トレース出力 &this if ( .not &モード )
メソッド呼び出し 戻り値 = &return, @cmdキャンセル.フォーカス設定() /* NG!です */ **戻り値 意味 ** 1 フォーカスを移した。 ** 0 フォーカスを移せなかった。 **-1 フォーカス設定できないハンドラ内で実行した。 トレース出力 _&return
メソッド呼び出し 戻り値 = &return, @cmdフォーカス移動.実行() /* NG!です */ トレース出力 _&return **戻り値 意味 ** 1 正常終了。 ** 1以外 実行できない。またはエラーで終了した。
**以上のように[入力後]イベントハンドラ実行中にフォーカスを移動することは不可能
**次のように、[入力後]イベントハンドラ実行後に時限式タイマーイベントを実行する &objectName = "フォーム" オブジェクト操作 &objectName{タイマー1 = 1, タイマー値1 = &interval } /* 時限式タイマーをセットします */ end
手続き定義終了
|