2

特定のdatagridview列ヘッダーにチェックボックスを追加しようとしていますが、オンラインで役立つコードを見つけましたが、正しく配置されておらず、修正方法がよくわかりません。

以下は問題とコードの画像です、どんな助けでも大歓迎です!

PSそれはプロパティと関係があるかもしれないと思いますが、私はそれらをいじってみましたが、成功しませんでした。

ここに画像の説明を入力してください

Private checkboxHeader231 As CheckBox
Private Sub show_chkBox()
Dim rect As Rectangle = DataGridView1.GetCellDisplayRectangle(columnIndexOfCheckBox, -1, True)
' set checkbox header to center of header cell. +1 pixel to position 
rect.Y = 3
rect.X = rect.Location.X + 8 + (rect.Width / 4)
checkboxHeader231 = New CheckBox()
With checkboxHeader231
    .BackColor = Color.Transparent
End With

checkboxHeader231.Name = "checkboxHeader1"
checkboxHeader231.Size = New Size(18, 18)
checkboxHeader231.Location = rect.Location
AddHandler checkboxHeader231.CheckedChanged, AddressOf checkboxHeader231_CheckedChanged
DataGridView1.Controls.Add(checkboxHeader231)
End Sub

Private Sub checkboxHeader231_CheckedChanged(sender As System.Object, e As System.EventArgs)
Dim headerBox As CheckBox = DirectCast(DataGridView1.Controls.Find("checkboxHeader1", True)(0), CheckBox)
For Each row As DataGridViewRow In DataGridView1.Rows
    row.Cells(columnIndexOfCheckBox).Value = headerBox.Checked
Next
End Sub
4

2 に答える 2

2

これは私の最初のエントリですが、これはあなたが探しているものだと思います. テストしたところ、データグリッドで機能しました。長方形の幅を使用していましたが、代わりに列幅に必要です。列ヘッダーを 4 に設定しましたが、4 を使用したい列に置き換えます。1 つは 4 つのループで、もう 1 つは 1 行として、2 つの方法で配置します。これがうまくいったかどうか教えてください:

Dim rect As Rectangle = DataGridView1.GetCellDisplayRectangle(4, -1, True) ' replace 4
        rect.Y = 3

        Dim sum = DataGridView1.Columns(0).Width

        'for this area write a for loop to find the width of each column except for the last line which you manually do
        '
        '
        'For i As Integer = 1 To 4 - 1 Step 1  ' replace 4
        'sum = sum + DataGridView1.Columns(i).Width
        'Next

        sum = sum + DataGridView1.Columns(1).Width
        sum = sum + DataGridView1.Columns(2).Width
        sum = sum + DataGridView1.Columns(3).Width
        ' stop here and add the last line by hand here

        sum = sum + (DataGridView1.Columns(4).Width / 2) + 35 ' used in both cases ' replace 4
        rect.X = sum

        checkboxHeader231 = New CheckBox()
        With checkboxHeader231
            .BackColor = Color.Transparent
        End With

        checkboxHeader231.Name = "checkboxHeader1"
        checkboxHeader231.Size = New Size(18, 18)
        checkboxHeader231.Location = rect.Location
        AddHandler checkboxHeader231.CheckedChanged, AddressOf checkboxHeader231_CheckedChanged
        DataGridView1.Controls.Add(checkboxHeader231)
于 2013-07-18T15:55:57.307 に答える