void RefreshPassengers() { var items = _cart.Passengers; pPassenger.SuspendLayout(); ps.RefreshPassengerList(); var lvItems = pPassenger.Controls.Cast <ButtonX>().ToArray(); var lvItemTags = lvItems.Select(s => s.Tag as Passenger).MapToHashSet(); //删除没有的 lvItems.Where(s => !items.Contains(s.Tag as Passenger)).ToArray().ForEach(pPassenger.Controls.Remove); //插入没有的 items.Except(lvItemTags).ForEach(s => { var btn = new ButtonX() { ColorTable = eButtonColor.Flat, Text = $"<b>{s.Name}</b> <font size=\"-1\" color=\"gray\">{s.TypeName}/{s.IdTypeName}</font>", Tag = s, AutoExpandOnClick = true, Padding = new Padding(10) }; //子项 if (s.Type == 1) { var addChild = new ButtonItem("addchild", "添加儿童票"); addChild.Click += (_1, _2) => { var pc = s.CreateChild(); items.Add(pc); }; btn.SubItems.Add(addChild); } var deleteItem = new ButtonItem("delete", "删除"); deleteItem.Click += (_1, _2) => items.Remove(s); btn.SubItems.Add(deleteItem); pPassenger.Controls.Add(btn); btn.SetToPreferredSize(); }); pPassenger.ResumeLayout(true); //达到上限后禁止编辑 ps.Enabled = _cart.Passengers.Count < 3; }