[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/10/21(Fri) 14:40
投稿者名:フック
Eメール:
URL :
タイトル:
MSFlexgridの表示方法
MSFlexgridの表示方法についてなのですが
期待動作の仕組みを説明します。

現在MSFlexgridにチェックボックスが貼り付けられています。
顧客管理のシステムなのですが、チェックボックスを貼り付け使っています。
削除などの項目を指定するためです。
ソートも使うため、ソート用のカラムを増やし、1か0でフラグを立てON OFFを判定しています。

困っている内容は
チェックボックスをONしたときに、一行に色を付けたいのですが期待通りの動作ができません。

Private Sub Check1_Click(Index As Integer)
    With MSFlexgrid1
    ' 16カラム目へフラグを立てる
        .TextMatrix(.TopRow + Index - 1, 16) = Check1(Index).value
        
     ' glbUserIdCount はデータベースのレコードカウントです。
     For i = 0 To glbUserIdCount 
            
      ' ここから色を付ける処理
      If .TextMatrix(i, 16) = "1" Then
            ' カーソルを移動して1セルづつ色を付けていく。
          ' 動作的、見た目は一応これでOKなのですが、しかし、あまりにも遅く実用は
無理です。
                    .RowSel = i
                    .ColSel = 15
                    For j = 0 To 15
                        .Row = i: .Col = j:
                        .CellBackColor = vbRed
                    Next
            Else
                    .RowSel = i
                    .ColSel = 15
                    For j = 0 To 15
                        .Row = i: .Col = j:
                        .CellBackColor = vbWhite
                    Next
            End If
     Next
    End With
End Sub

ここのHPの MSFlexGridの主要プロパティ一覧表 を参照し色々な組み合わせてを試しているのです
が、やはり期待通りの動作ができません。
どのようにすれば、高速で同じ動作が実現できるのでしょうか?
どうか、よろしくお願いします。

投稿時間:2005/10/21(Fri) 15:05
投稿者名:フック
Eメール:
URL :
タイトル:
Re: MSFlexgridの表示方法
追記です。

MSFlexgrid1.Visble = False

一連の処理中

MSFlexgrid1.Visble = Ture

としたとき、数十件までは問題なく動作します。
しかし、最大登録件数が1万件でして、1万件登録したときは、
応答がなくなってしまうほど、重くなってしまいます。

投稿時間:2005/10/22(Sat) 13:37
投稿者名:水無月
Eメール:
URL :
タイトル:
Re: MSFlexgridの表示方法
使い方を見ますと、チェックボックスを1つクリックするとグリッドの全ての行をチェックして
色づけの動作を行っているように見えますが…
これはForm_Loadの時だけ行い、後はクリックした行の色付けだけでいいのではないのでしょうか?
1行の色付けであれば瞬時に終わりますが…

Private Sub Check1_Click(Index As Integer)
    With MSFlexgrid1
    ' 16カラム目へフラグを立てる
         .Row = .TopRow + Index - 1
         .TextMatrix(.Row, 16) = Check1(Index).Value '16列目に書き込む
         .Visible = False '非表示にする
         If .TextMatrix(.Row, 16) = "1" Then '16列目が1なら色付け
              For i = .FixedCol to .Cols - 1
                  .Col = i
                  .CellBackColor = vbRed
              Next
         Else
              For i = .FixedCol to .Cols - 1
                  .Col = i
                  .CellBackColor = &H80000005&
              Next
         End If
         .Visible = True '表示を戻す
    End With
End Sub


おまけですが、グリッドのRowHeightMinプロパティをデフォルトの255から300程度に変えると表示ス
ピードが上がります。(遅いマシンでは有効でした)

投稿時間:2005/10/24(Mon) 11:43
投稿者名:フック
Eメール:
URL :
タイトル:
Re^2: MSFlexgridの表示方法
水無月さん本当にありがとうございます。
頂いたソースで期待通りの動作ができました。
本当に助かりました。ありがとうございます。