以下のコードは機能します
void selectColumns_Click(object s, EventArgs e)
{
ListBox lBx = getListBox();
for (int i = 0; i < lBx.Items.Count-1;i++ )
{
bool contained = lBx.SelectedItems.Contains(lBx.Items[i]);
dgView.Columns[lBx.Items[i].ToString()].Visible = contained;
}
}
しかし、これは機能しません- 「この列挙子がバインドされているリストが変更されました。列挙子は、リストが変更されない場合にのみ使用できます。」というエラーがスローされます。
void selectColumns_Click(object s, EventArgs e)
{
ListBox lBx = getListBox();
foreach (var item in lBx.Items )
{
bool cont = lBx.SelectedItems.Contains(item);
dgView.Columns[item.toString()].Visible = cont;
}
}
Get ListBox メソッドは以下のとおりです。
ListBox getListBox()
{
return columnsForm.Controls.OfType<ListBox>().First() as ListBox;
}
また、hideColumnsButton をクリックすると、リストボックスに値が入力されます。
void hideBtn_Click(object sender, EventArgs e)
{
getListBox().Items.Clear();
foreach(DataGridViewColumn col in dgView.Columns)
{
getListBox().Items.Add(col.Name);
}
columnsForm.ShowDialog();
}