0

私はDataGridViewの最初の列にCheckBoxColumを付けて作業しています。現在チェックされているすべてのボックスのインデックスを照会できるようにしたい。私はこのテストコードを持っていますが、なんらかの理由でチェックされた最初のチェックボックスだけを返し、チェックされたすべてのボックスのコレクションは返しません。 チェックボックス列のある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(300, 200) 
$form.KeyPreview = $true 
$form.StartPosition = 'centerscreen' 
$form.Add_KeyDown({if($_.KeyCode -eq "Escape"){$form.Close()}}) 
$DataGrid1 = New-Object System.Windows.Forms.DataGridView 
$DataGrid1.Location = New-Object System.Drawing.Size(298,29) 
$DataGrid1.Dock = "Fill" 
$DataGrid1.BorderStyle = 'FixedSingle' 
$DataGrid1.AlternatingRowsDefaultCellStyle.BackColor = 'LightGray' 
$DataGrid1.AllowUserToAddRows = $false 
$DataGrid1.RowHeadersVisible = $false 
$CheckBoxColumn = New-object System.Windows.Forms.DataGridViewCheckBoxColumn 
$CheckBoxColumn.Width = 50 
$CheckBoxColumn.ReadOnly = $false 
$DataGrid1.columns.Add($CheckBoxColumn) |out-null 
$dataGrid1.columncount = 3 

$DataGrid1.rows.Add($($false,'b','d')) |out-null 
$DataGrid1.rows.Add($($false,'b','d')) |out-null 
$DataGrid1.rows.Add($($false,'b','d')) |out-null 
$DataGrid1.rows.Add($($false,'b','d')) |out-null 

$form.add_Keydown({ 
    if($_.KeyCode -eq 70){ # the 'f' key 
     for($i = 0;$i -lt $DataGrid1.Rows.Count;$i++){ 
      if($DataGrid1.rows[$i].Cells[0].Value.ToString() -eq "true"){ 
       write-host $i -ForegroundColor Magenta #output checked indexes 
      } #output checkbox state (true = checked) 
      write-host $DataGrid1.rows[$i].Cells[0].Value -BackgroundColor DarkYellow 
     } 
    } 
}) 
$form.Controls.Add($DataGrid1) 
$form.ShowDialog() 

には、例えば、第二、第四のボックスがチェックされ、場合、それだけで2番目のボックスがチェックされていることを報告し、第四チェックボックスをオフにすること(濃い黄色の出力を見てください)。

誰かがこれがなぜ起こり、どうやって解決するのか正しい方向に向けることができますか?

答えて

1

使用EditedFormattedValue代わり

$form.add_Keydown({ 
    clear 
    if($_.KeyCode -eq 70){ # the 'f' key 
     for($i = 0;$i -lt $DataGrid1.Rows.Count;$i++){ 
      if($DataGrid1.rows[$i].Cells[0].EditedFormattedValue.ToString() -eq "True"){ 
       write-host $i -ForegroundColor Magenta #output checked indexesf 
      } #output checkbox state (true = checked) 
      write-host $DataGrid1.rows[$i].Cells[0].EditedFormattedValue -BackgroundColor DarkYellow 
     } 
    } 
}) 

あなたがDataGrid内EdittedFormattedValue値Vsにもっと読みたい場合は https://www.codeproject.com/Tips/777492/EditedFormattedValue-v-s-Value-in-Datagridview

関連する問題