VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/01/16(Tue) 20:21
投稿者7-2/1
Eメール
URL
タイトルMSFlexGridにチェックボックスを表示するで

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
------------------------------------------------------------------


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -