tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
MSFlexGridにチェックボックスを表示する(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2007/09/13 05:33
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[グリッド関係][][]                                                  *
* キーワード:MSHFlexGrid,CheckBox,,,,                                            *
***********************************************************************************
この手の質問が過去何度も出てきたのですがその時は、VB初心者友の会のVBテーマ掲示板2
「こんな事できます!」に投稿されていた分を紹介していたのですが、今は、閉鎖されているようなので、最近の投稿分ですが掲載する事にしました。
----------------------------------------------------------------------------------

元質問:MSFlexGridにチェックボックスを表示するで - 7-2/1  2007/01/16-20:21 No.8112
MSFlexGridの一番左側にチェックボックスを表示しようとしています。
表示する方法は、このサイトの過去ログを検索し、作ってみました。
MSFlexGridにチェックボックスを表示することはできたのですが、MSFlexGridの最後に、どうしても、チェックボックスが1個余分に表示されてしまうのです。
ただ、MSFlexGridに表示するデータはありません。チェックボックスのみが表示されてしまうのです。
どうしてなのでしょうか。解決策などを教えて欲しいのですが。

以下に、MSFlexGridにチェックボックスを表示するソースを記載します。
------------------------------------------------------------------
Option Explicit

Dim CheckBox_cnt As Long

Private Declare Function SetParent Lib "user32" _
                        (ByVal hWndChild As Long, _
                         ByVal hWndNewParent As Long) As Long
Private Sub Form_Load()
    Call Grid_init
    Call Grid_set
End Sub
Private Sub Grid_init()
    MSFlexGrid1.CellAlignment = 1
    MSFlexGrid1.HighLight = flexHighlightNever
    MSFlexGrid1.Clear
    MSFlexGrid1.Cols = 5
    MSFlexGrid1.Rows = 2
    MSFlexGrid1.TextMatrix(0, 0) = "X"
    MSFlexGrid1.ColWidth(0) = 200
    MSFlexGrid1.TextMatrix(0, 1) = "番号"
    MSFlexGrid1.ColWidth(1) = 900
    MSFlexGrid1.TextMatrix(0, 2) = "名前"
    MSFlexGrid1.ColWidth(2) = 2000
    MSFlexGrid1.TextMatrix(0, 3) = "住所"
    MSFlexGrid1.ColWidth(3) = 4000
    MSFlexGrid1.TextMatrix(0, 4) = "電話番号"
    MSFlexGrid1.ColWidth(4) = 2000
End Sub
Private Sub Grid_set()
Dim lng_I As Long
Dim lng_J As Long
Dim I     As Long

'** エラートラップ開始
  On Error Resume Next

    'Call CheckBox_Clear
    CheckBox_cnt = 0
    lng_I = 0
    lng_J = 0
    
    MSFlexGrid1.ColAlignment(1) = 0

    For I = 0 To 10
        lng_I = lng_I + 1
        MSFlexGrid1.Rows = lng_I + 1

        MSFlexGrid1.TextMatrix(lng_I, lng_J) = "0"
        Call MoveCheck

        MSFlexGrid1.TextMatrix(lng_I, lng_J + 1) = "000001"
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 2) = "山田 太郎"
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 3) = "東京都千代田区大手町"
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 4) = "03-0000-0000"

        CheckBox_cnt = lng_I
    Next
End Sub
Private Sub MoveCheck()
  Const CHECK_COL = 0
  Dim sngTwipsPerPixelX As Single
  Dim sngTwipsPerPixelY As Single
  Dim I As Long, j As Long

  sngTwipsPerPixelX = Screen.TwipsPerPixelX
  sngTwipsPerPixelY = Screen.TwipsPerPixelY

  j = 1
  With MSFlexGrid1
    If .ColIsVisible(CHECK_COL) Then
      I = .Rows - 1
      j = .Rows - 1
        If j > Check1.UBound Then
          Load Check1(j)
          Call SetParent(Check1(j).hWnd, MSFlexGrid1.hWnd)
        End If
        Check1(j).Move .ColPos(CHECK_COL) + sngTwipsPerPixelX, _
                       .RowPos(I) + sngTwipsPerPixelY, _
                       .ColWidth(CHECK_COL) - sngTwipsPerPixelX * 3, _
                       .RowHeight(I) - sngTwipsPerPixelY * 3
        Check1(j).Caption = ""

        If .TextMatrix(I, CHECK_COL) = "1" Then
            Check1(j).Value = 1
        Else
            Check1(j).Value = 0
        End If

        Check1(j).Tag = I
        Check1(j).Visible = True
    End If
    .Refresh
  End With
End Sub
Private Sub CheckBox_Clear()
Dim I As Long

    If CheckBox_cnt >= 1 Then
        For I = 1 To CheckBox_cnt
            Check1(I).Value = False
            Check1(I).Visible = False
            Check1(I).Enabled = True
        Next
    End If
End Sub

-----------------------------------------------------------------------------------
参考コード - 花ちゃん  2007/01/17-01:46 No.8121

詳しくは一連のスレッドをご覧下さい。
-----------------------------------------------------------------------------------

下記コードを追加してみたらどうでしょう。
Check1(1) から作成しているようですがそれでいいのですか? Check1(0) は
まあ、後はお好きなようにして下さい。

Private Sub MSFlexGrid1_Scroll()
   Const CHECK_COL = 0
   Dim sngTwipsPerPixelX As Single
   Dim sngTwipsPerPixelY As Single
   Dim i As Long, j As Long
   sngTwipsPerPixelX = Screen.TwipsPerPixelX
   sngTwipsPerPixelY = Screen.TwipsPerPixelY
   For j = MSFlexGrid1.TopRow To MSFlexGrid1.Rows - 1
      With MSFlexGrid1
         If .ColIsVisible(CHECK_COL) And .RowIsVisible(j) Then
            Check1(j).Move .ColPos(CHECK_COL) + sngTwipsPerPixelX, _
                           .RowPos(j) + sngTwipsPerPixelY, _
                           .ColWidth(CHECK_COL) - sngTwipsPerPixelX * 3, _
                           .RowHeight(j) - sngTwipsPerPixelY * 3
         End If
      End With
   Next j
   MSFlexGrid1.Refresh
End Sub


--------------------------------------------------------------------------------
参考コードありがとうございます。
上手くいきました。
-----------------------------------------------------------------------------
Option Explicit

Dim CheckBox_cnt As Long

Private Declare Function SetParent Lib "user32" _
                        (ByVal hWndChild As Long, _
                         ByVal hWndNewParent As Long) As Long
Private Sub Form_Load()
    Check1(0).Visible = False
    Call Grid_init
    Call Grid_set
End Sub
Private Sub Grid_init()
    MSFlexGrid1.CellAlignment = 1
    MSFlexGrid1.HighLight = flexHighlightNever
    MSFlexGrid1.Clear
    MSFlexGrid1.Cols = 5
    MSFlexGrid1.Rows = 2
    MSFlexGrid1.TextMatrix(0, 0) = "X"
    MSFlexGrid1.ColWidth(0) = 200
    MSFlexGrid1.TextMatrix(0, 1) = "番号"
    MSFlexGrid1.ColWidth(1) = 900
    MSFlexGrid1.TextMatrix(0, 2) = "名前"
    MSFlexGrid1.ColWidth(2) = 2000
    MSFlexGrid1.TextMatrix(0, 3) = "住所"
    MSFlexGrid1.ColWidth(3) = 4000
    MSFlexGrid1.TextMatrix(0, 4) = "電話番号"
    MSFlexGrid1.ColWidth(4) = 2000
End Sub
Private Sub Grid_set()
Dim lng_I As Long
Dim lng_J As Long
Dim i     As Long

'** エラートラップ開始
  On Error Resume Next

    'Call CheckBox_Clear
    CheckBox_cnt = 0
    lng_I = 0
    lng_J = 0
    
    MSFlexGrid1.ColAlignment(1) = 0

    For i = 1 To 10
        lng_I = lng_I + 1
        MSFlexGrid1.Rows = lng_I + 1

        MSFlexGrid1.TextMatrix(lng_I, lng_J) = "0"
        Call MoveCheck

        MSFlexGrid1.TextMatrix(lng_I, lng_J + 1) = Format$(i, "000000")
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 2) = "山田 太郎"
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 3) = "東京都千代田区大手町"
        MSFlexGrid1.TextMatrix(lng_I, lng_J + 4) = "03-0000-0000"

        CheckBox_cnt = lng_I
    Next
    Debug.Print CheckBox_cnt
End Sub
Private Sub MoveCheck()
  Const CHECK_COL = 0
  Dim sngTwipsPerPixelX As Single
  Dim sngTwipsPerPixelY As Single
  Dim i As Long, j As Long

  sngTwipsPerPixelX = Screen.TwipsPerPixelX
  sngTwipsPerPixelY = Screen.TwipsPerPixelY

  j = 1
  With MSFlexGrid1
    If .ColIsVisible(CHECK_COL) Then
      i = .Rows - 1
      j = .Rows - 1
        If j > Check1.UBound Then
          Load Check1(j)
          Call SetParent(Check1(j).hWnd, MSFlexGrid1.hWnd)
        End If
        Check1(j).Move .ColPos(CHECK_COL) + sngTwipsPerPixelX, _
                       .RowPos(i) + sngTwipsPerPixelY, _
                       .ColWidth(CHECK_COL) - sngTwipsPerPixelX * 3, _
                       .RowHeight(i) - sngTwipsPerPixelY * 3
        Check1(j).Caption = ""

        If .TextMatrix(i, CHECK_COL) = "1" Then
            Check1(j).Value = 1
        Else
            Check1(j).Value = 0
        End If

        Check1(j).Tag = i
        Check1(j).Visible = True
    End If
    .Refresh
  End With
End Sub
Private Sub MSFlexGrid1_Scroll()
   Const CHECK_COL = 0
   Dim sngTwipsPerPixelX As Single
   Dim sngTwipsPerPixelY As Single
   Dim i As Long, j As Long
   sngTwipsPerPixelX = Screen.TwipsPerPixelX
   sngTwipsPerPixelY = Screen.TwipsPerPixelY
   For j = MSFlexGrid1.TopRow To MSFlexGrid1.Rows - 1
      With MSFlexGrid1
         If .ColIsVisible(CHECK_COL) And .RowIsVisible(j) Then
            Check1(j).Move .ColPos(CHECK_COL) + sngTwipsPerPixelX, _
                           .RowPos(j) + sngTwipsPerPixelY, _
                           .ColWidth(CHECK_COL) - sngTwipsPerPixelX * 3, _
                           .RowHeight(j) - sngTwipsPerPixelY * 3
         End If
      End With
   Next j
   MSFlexGrid1.Refresh
End Sub



 [スレッド一覧へ] [親スレッドへ]