2017年10月24日

【Access】帳票フォームでRequeryを行っても画面がチラつかないようにする


前回、「帳票フォームでRequeryを行ってもレコードの表示位置が変わらないようにする」方法を書きましたが、この方法だとレコード件数が多くなってくると画面のチラつきが気になってきます。

このような場合、フォームのPaintingプロパティを一時的にOFFにして描画を止めることによって画面のチラつきを抑えることが出来ます。

Private Sub buttonRequery_Click()

    Dim headerHeight As Long
    Dim curTop As Long
    Dim curRecNum As Long
    Dim topRecNum As Long
    
    Me.ID.SetFocus
    
    curRecNum = Me.CurrentRecord
    
    headerHeight = Int(Me.Section("フォームヘッダー").Height / Me.Section("詳細").Height)
    
    curTop = Me.CurrentSectionTop
    
    topRecNum = curRecNum - (Int(curTop / Me.Section("詳細").Height) - headerHeight)
    
    'フォームの描画をOFF
    Me.Painting = False
    
    '再表示
    Me.Requery

    '表示の復元
    DoCmd.GoToRecord acActiveDataObject, , acLast
    DoCmd.GoToRecord acActiveDataObject, , acGoTo, topRecNum
    DoCmd.GoToRecord acActiveDataObject, , acGoTo, curRecNum
    
    'フォームの再描画をON
    Me.Painting = True
 
End Sub

Requeryの前に「Painting = False」で描画をOFFにして、レコードの表示位置を復元したあとに「Me.Painting = True」で再描画をONにしています。

少ないレコード数では、この処理を入れるのと入れないのであまり違いがみられませんが、レコード数が多くなってくると明らかに違いが出てきます。






スポンサーリンク