0

フォームにdatagridviewがあります。このdatagridviewの最初の列はCheckBoxColumnです。最初の列のヘッダーにチェックボックスを追加して、その下にあるチェックボックスのすべてを選択するようにしています。オンラインで見つかったC#の例を理解できず、PowerShellの例が見つかりませんでした。誰かがこれを行う方法の正しい方向に私を指すことができますか?Datagridviewのヘッダーセルにチェックボックスを追加します。

[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) 
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Drawing”) 
$form = New-Object System.Windows.Forms.Form 
$form.Size = New-Object System.Drawing.Size(400, 400) 
$form.KeyPreview = $true 

$CheckBoxColumn1 = New-object System.Windows.Forms.DataGridViewCheckBoxColumn 
$CheckBoxColumn1.Width = 30 
$CheckBoxColumn1.ReadOnly = $false 

$DataGrid1 = New-Object System.Windows.Forms.DataGridView 
$DataGrid1.Dock = "Fill" 
$DataGrid1.BorderStyle = 'FixedSingle' 
$DataGrid1.AlternatingRowsDefaultCellStyle.BackColor = 'LightGray' 
$DataGrid1.AllowUserToAddRows = $false 
$DataGrid1.RowHeadersVisible = $false 
$DataGrid1.BackgroundColor = "White" 
$DataGrid1.Columns.Add($CheckBoxColumn1) | Out-Null 
$DataGrid1.ColumnCount = 3 
$DataGrid1.Columns[1].name = 'col1' 
$DataGrid1.Columns[2].name = 'col2' 
$DataGrid1.Rows.add($false,'one','two') 
$DataGrid1.Rows.add($false,'three','four') 

##Add checkbox to header row column 0 

$form.Controls.Add($DataGrid1) 
$form.ShowDialog() 

答えて

0

列ヘッダーセル自体にチェックボックスを追加する方法が見つからないため、私は回避策を開発しました。私はのフォームにのチェックボックスを追加し、ヘッダーセルがあるところに戦略的に配置しました。 datagridviewで正しく動作させるために、さまざまなイベントを処理しました。

チェックボックスについては、CheckStateChangedイベントの代わりにClickイベントを使用しました。これは、チェックボックスをクリックするたびにすべてのセルチェックボックスをオフにしないようにするためですが、変更した特定のボックスとヘッダーのチェックボックスのみをオンにします。

$checkbox1 = New-Object System.Windows.Forms.CheckBox 
$checkbox1.Location = New-Object System.Drawing.Size(10,5) 
$checkbox1.Size = New-Object System.Drawing.Size(13,13) 
$checkbox1.Visible = $true 
$checkbox1.add_Click({ 
    if($checkbox1.Checked){ 
     for($i = 0; $i -lt $datagrid1.RowCount;$i++){ 
      $datagrid1.Rows[$i].Cells[0].Value = $true 
     } 
    } 
    else{ 
     for($i = 0; $i -lt $datagrid1.RowCount;$i++){ 
      $datagrid1.Rows[$i].Cells[0].Value = $false 
     } 
    } 
}) 
$form.Controls.Add($checkbox1) 

#Handle Events: 
$DataGrid1.add_CellContentClick({ 
    $datagrid1.EndEdit() #otherwise the cell value won't have changed yet 
    [System.Windows.Forms.DataGridViewCellEventArgs]$e = $args[1] 
    if($e.columnIndex -eq 0){ 
     if($datagrid1.rows[$e.RowIndex].Cells[$e.ColumnIndex].value -eq $false){ 
      $checkbox1.CheckState = 'unchecked' 
     } 
    } 
}) 

あなたはデータグリッドを移入したときのみに、あなたのチェックボックスが表示されたい場合は、Visibleプロパティに見えます。このように$trueまたは$falseに設定することができます。$datagrid1.Visible = $false

関連する問題