tagCANDY CGI VBレスキュー(花ちゃん) - MSFlexGridにチェックボックスを表示する(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
MSFlexGridにチェックボックスを表示する(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

MSFlexGridにチェックボックスを表示する(VB6.0) [No.112の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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
メンテ

Page: 1 |

MSFlexGridにチェックボックスを表示する(VB6.0)_1  (No.1の個別表示) [スレッド一覧へ]
日時: 2011/04/05 10:39
名前: 花ちゃん

* カテゴリー:[グリッド関係]

-----------------------------------------------------------------------------------
Re^4: 参考コード - MSFlexGridにチェック.. - LESIA  2007/01/17-14:51 No.8133
-----------------------------------------------------------------------------------

こういうのはどうでしょうか?
これならチェックボックスコントロールを使わないのでいいかも。

Option Explicit

Private Sub Form_Load()
    Call Grid_init
    Call Grid_set
End Sub

Private Sub Grid_init()
    MSFlexGrid1.CellAlignment = 1
    MSFlexGrid1.FixedCols = 0
    MSFlexGrid1.HighLight = flexHighlightNever
    MSFlexGrid1.Clear
    MSFlexGrid1.Cols = 5
    MSFlexGrid1.Rows = 2
    MSFlexGrid1.TextMatrix(0, 0) = "X"
    MSFlexGrid1.ColWidth(0) = 300
    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

    lng_I = 0
    lng_J = 0
    
    With MSFlexGrid1
        .ColAlignment(1) = 0

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

            .Row = lng_I
            .Col = lng_J
            .CellFontName = "Wingdings"
            .CellFontSize = 11
            .Text = Chr$(112) 'UnChecked

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

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 1 Then
        With MSFlexGrid1
            If .MouseCol = 0 Then
                If .TextMatrix(.MouseRow, .MouseCol) = Chr$(254) Then
                    .TextMatrix(.MouseRow, .MouseCol) = Chr$(112) 'UnChecked
                Else
                    .TextMatrix(.MouseRow, .MouseCol) = Chr$(254) 'Checked
                End If
            End If
        End With
    End If
End Sub

--------------------------------------------------------------------------
>    .CellFontName = "Wingdings"
>    .CellFontSize = 11
> について教えていただきたいのですが、
> 使ったことがないのですが、
>  ・CellFontName は?
>  ・Wingdings は?
>   ヘルプとかで調べてみたのですが、ありませんでした。

CellFontNameにカーソルを合わせてF1キーを押せば出てくるはずですが…。
左のカテゴリ別サンプル一覧のMSFlexGrid関係の主要プロパティ一覧にも載ってますよ。
Wingdingsはこちらを参考にしてください。&#0112と&#0254が使っている文字コードです。
でも、ここを見ると&#112より&#111の方がいいかもしれないですね。
http://pielin.hp.infoseek.co.jp/fonts/wingdings.html

メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ