void updateShipListView(IEnumerable <MemberData.Ship.Info> ships) { lvShipList.BeginUpdate(); //現在登録されてるリスト内容をハッシュへ Dictionary <int, ShipListViewItem> updateMap = new Dictionary <int, ShipListViewItem>(); foreach (ShipListViewItem it in lvShipList.Items) { updateMap[it.Info.ShipId] = it; } //表を更新/追加する foreach (MemberData.Ship.Info it in ships) { if (updateMap.ContainsKey(it.ShipId)) { //既に存在してる艦艇情報の更新をする updateMap[it.ShipId].Update(it); updateMap.Remove(it.ShipId); } else { //なければ新規に追加 ShipListViewItem lvit = new ShipListViewItem(it, _ilSlotItem); lvShipList.Items.Add(lvit); } } //消失した艦艇をリストから消す foreach (var it in updateMap.Values) { lvShipList.Items.Remove(it); } int used = 0, total = lvShipList.Items.Count; foreach (ShipListViewItem it in lvShipList.Items) { if (it.Info.Fleet != null && it.Info.Fleet.Length > 0) { used++; } } if (used == total) { used = -1; } Text = string.Format("艦娘一覧 艦隊:{0} {1}/{2}", used, total, MaxShip); lvShipList.EndUpdate(); }
public FormShipList(ImageList ilSlotItem) { _ilSlotItem = ilSlotItem; InitializeComponent(); lvShipList.DoubleBuffer(true); //ウィンドウハンドルを生成しないと、Invokeで死ぬ IntPtr dummyHandle = Handle; ShipListViewItem.InitializeColumn(lvShipList); lvShipList.ListViewItemSorter = Comparer <ShipListViewItem> .Default; lvShipList.LoadColumnWithOrder(Properties.Settings.Default.ShipListColumnWidth); if (!Properties.Settings.Default.ShipListBounds.IsEmpty) { Bounds = Properties.Settings.Default.ShipListBounds; } var sm = new SystemMenu(this); sm.InsertMenuItem(1, "ウィンドウ復帰", 6); }