ListViewItemの複数の行を表示するListViewがあります。ユーザーは、[編集]をクリックした後に開くダイアログを介してこれらの項目の1つを編集できます。ダイアログが閉じたら、選択したListViewItemを変更して、新しい設定が反映されるようにします。
現在、アイテムを更新する方法は次のとおりです。
private void btnEditSnmpV3Setting_Click(object sender, EventArgs e)
{
if (lstVwSNMPv3Settings.SelectedItems.Count > 0)
{
ListViewItem selectedItem = lstVwSNMPv3Settings.SelectedItems[0];
NetworkDiscoverySnmpSetting settings = (NetworkDiscoverySnmpSetting)selectedItem.Tag;
NetworkDiscoverySnmpV3SettingsDialog dialog = new NetworkDiscoverySnmpV3SettingsDialog(settings);
//Pass in the owner for centering of dialog.
if (dialog.ShowDialog(this) == DialogResult.OK)
{
selectedItem.SubItems.Clear();
selectedItem.Text = settings.SnmpV3Username;
selectedItem.SubItems.Add(settings.SecurityMode.ToString());
selectedItem.SubItems.Add(settings.AuthenticationProtocol.ToString());
selectedItem.SubItems.Add(settings.PrivacyProtocol.ToString());
selectedItem.Tag = settings;
}
}
}
ListViewの列数が変更された場合、複数の場所でコードに触れる必要があるため、これは不十分な解決策であることがわかりました。
NetworkDiscoverySnmpSetting
ユーティリティメソッドを指定することで、(「編集」ではなく)「追加」イベント中にこのコード再利用の問題を処理しました。
public ListViewItem ToListViewItem()
{
ListViewItem listViewItem = new ListViewItem();
listViewItem.Text = SnmpV3Username;
listViewItem.SubItems.Add(SecurityMode.ToString());
listViewItem.SubItems.Add(AuthenticationProtocol.ToString());
listViewItem.SubItems.Add(PrivacyProtocol.ToString());
listViewItem.Tag = this;
return listViewItem;
}
これは次のように使用されます:
private void btnAddSnmpV3Setting_Click(object sender, EventArgs e)
{
NetworkDiscoverySnmpSetting settings = new NetworkDiscoverySnmpSetting(NetworkDiscovery.ID);
NetworkDiscoverySnmpV3SettingsDialog dialog = new NetworkDiscoverySnmpV3SettingsDialog(settings);
//Pass in the owner for centering of dialog.
if (dialog.ShowDialog(this) == DialogResult.OK)
lstVwSNMPv3Settings.Items.Add(settings.ToListViewItem());
}
残念ながら、ListView.SelectedItemsではコレクションの変更は許可されていません。そのため、これはコンパイルされません。
lstVwSNMPv3Settings.SelectedItems[0] = settings.ToListViewItem();
ListViewの列が変更されたときに複数の場所でコードを更新する必要がないように、最初のコードスニペットをどのように変更する必要がありますか?