Spread

Q 12
指定した行を表の先頭行に表示したい

A 12
[解決方法]
SetScrollPosメソッドとTimerイベントを利用した対応方法が考えられます。

SetScrollPosメソッドの引数へ「先頭にしたい行 + 表示行数」を指定し、実行します。
その後、再度SetScrollPosメソッドの引数へ「先頭にしたい行」を指定し、実行します。
ただし、先のScrollPosメソッドの実行と後のSetScrollPosメソッドの実行の間にアイドル状態を入れる必要があります。

これは、Biz/Browserが「アイドル状態になったタイミングで表示の更新をする」という仕様で、アイドル状態になる前に同様の処理を行っていた場合、後の処理のみ有効となるためです。
同じFunction内で上記のSetScrollPosメソッド処理を行った場合、後のSetScrollPosメソッドの実行のみ有効となり、期待した結果となりません。
先のSetScrollPosメソッドの実行の後、Timerを利用してアイドル状態を入れることで表示が更新され、後のSetScrollPosメソッドの実行で先頭にしたい行が表示されます。

※ただし、上記の対応方法の場合、先のSetScrollPosメソッドの引数に存在しない行番号を指定することができず最終行を指定するため、最終行を含む表示の場合には動作が異なります。


[サンプルコード]
Form Form1 {
    X = 0;
    Y = 0;
    Width = 400;
    Height = 300;

    /* スプレッドに表示されている行数 */
    Number Row_Num = 5;

    TextBox TextBox1 {
        X = 15;
        Y = 10;
        Width = 100;
        Height = 25;
    }

    Button Button1 {
        X = 125;
        Y = 10;
        Width = 150;
        Height = 25;
        Title = "指定行を先頭行にする";

        Function OnTouch( e ) {
            var r = ^.TextBox1.Value + ^.Row_Num;

            if(  ( 0 > ^.TextBox1.Value )
              || ( ^.TextBox1.Value > ^.Spread1.SpreadRow1.length - 1) ) {
                MessageBox( "0から" + str(^.Spread1.SpreadRow1.length - 1)
                          + "の範囲で指定してください");
                return;
            }
            if ( r > ^.Spread1.SpreadRow1.length) {
                r = ^.Spread1.SpreadRow1.length;
            }
            ^.Spread1.SetScrollPos( r );

            SetTimer( 0.1 );

        }

        Function OnTimer( e ) {
            RemoveTimer();
            ^.Spread1.SetScrollPos( ^.TextBox1.Value );
            ^.Spread1.Value = ^.TextBox1.Value;
        }
        
    }

    Spread Spread1 {
        X = 15;
        Y = 50;
        Width = 360;
        Height = 145;
        ShowNumber = $FALSE;
        SpreadRow SpreadRow1[20] {
            Height = 25;
            SpreadColumn SpreadColumn1 {
                Value &= Str(^.index) + "行";
            }
            SpreadColumn SpreadColumn2;
            SpreadColumn SpreadColumn3;
        }
    }

    if ( !$DESIGNTIME ) {
    }
}
管理番号:Spd_012
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ