入力内容のリセットや、画面の初期化・遷移時にスクロールバーを上部に戻すといった動作を実現する場合、
フォーカスを画面上部のオブジェクトに移動させる事によって、
スクロールバーが上部に戻るような動作を実現できる事ができます。
[サンプル1]
以下の画面では、「登録日」の横に、フォーカス移動用のButtonオブジェクト(以下、「dummy」ボタン)を
配置しています。
※画面上では見えないよう、WidthとHeightを「0」に設定しています。
「削除」ボタン押下時、一度この「dummy」ボタンへフォーカスを移動する事により、
スクロールバーを上部へ戻すような動きを実現できます。
但し、上記の実装方法は、フォーカスの動きに左右されるため、
フォーカスの動くタイミングによっては、スクロールバーが移動できない場合があります。
[サンプル2]
上記のような現象は、「dummy」ボタンのGetFocusイベントが完全に終了する前
(「dummy」ボタンへ完全にフォーカスが移動する前)に、
SetFocusメソッドが実行され「ステータス」へフォーカスが移動しているため発生しています。
■スクロールバーが上部へ移動しない場合(サンプル2)の記述
/* 削除ボタン */
Button del_b {
X = 206;
Y = 54;
Width = 78;
Height = 26;
Title = "削除";
Function OnTouch( e ) {
/* 値のクリア */
Fcs_005.del_data();
}
}
/* dummyボタン */
Button dummy {
X = 6;
Y = 3;
Width = 0;
Height = 0;
/* ★問題箇所★ */
Function OnGetFocus( e ) {
Fcs_005.SplitterFrame1.SplitterForm1.status_l.SetFocus();
}
}
Function del_data(e) {
/* データ初期化 */
Fcs_005.SplitterFrame1.SplitterForm2.user_data.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.date_l.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.insert_l.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.memo.Value = "";
Fcs_005.SplitterFrame1.SplitterForm1.status_l.Value = "";
/* 「dummy」へSetFocus */
Fcs_005.SplitterFrame1.SplitterForm2.dummy.SetFocus();
}
スクロールバーを移動させるためには、「dummy」ボタンのGetFocusイベントが完全に終了した後、
「ステータス」へフォーカスが移動が行われるようにする必要があります。
方法としては、Timerイベントを利用して、GetFocusイベントが完全に終了した後、
フォーカス移動する方法があります。
■スクロールバーが上部へ移動する場合(サンプル1)の記述
/* 削除ボタン */
Button del_b {
X = 206;
Y = 54;
Width = 78;
Height = 26;
Title = "削除";
Function OnTouch( e ) {
/* 値のクリア */
Fcs_005.del_data();
}
}
/* dummyボタン */
Button dummy {
X = 6;
Y = 3;
Width = 0;
Height = 0;
/* ★改善箇所★ */
Function OnGetFocus( e ) {
/* Timerをセット */
SetTimer(0.2);
}
Function OnTimer( e ) {
/* Timerを解除 */
RemoveTimer();
/* Focusを受けたら、「status_l」へSetFocus */
Fcs_005.SplitterFrame1.SplitterForm1.status_l.SetFocus();
}
}
Function del_data(e) {
/* データ初期化 */
Fcs_005.SplitterFrame1.SplitterForm2.user_data.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.date_l.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.insert_l.Value = "";
Fcs_005.SplitterFrame1.SplitterForm2.memo.Value = "";
Fcs_005.SplitterFrame1.SplitterForm1.status_l.Value = "";
/* 「dummy」へSetFocus */
Fcs_005.SplitterFrame1.SplitterForm2.dummy.SetFocus();
}
実際の挙動については、CRSファイル形式のサンプル
「スクロールバーの位置制御サンプル (Fcs_005.zip)」
をご確認ください。
|