2017年10月24日

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


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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にしています。

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






スポンサーリンク



Follow Me on Pinterest
Clip to Evernote