/// <summary> /// 다른 item들의 위치를 변경시키지 않고 그냥 지운다. /// </summary> /// <param name="index"></param> public void RemoveAt(int index, bool eventEnabled) { BitItem itemToRemoved = _items[index]; if (_items.ContainsKey(index)) { _items.Remove(index); if (_bitArea != null) { for (int i = itemToRemoved.StartOffset; i < itemToRemoved.StartOffset + itemToRemoved.BitSize; i++) { _bitArea[i] = -1; } } } else { throw new Exception("BitItemCollection.RemoveAt - no item in index[" + index + "]"); } if (E_BitItemRemoved != null && eventEnabled) { E_BitItemRemoved(_parent, itemToRemoved); } }
public wTreeNode this[int index] { get { if (index < _list.Count && index >= 0) { return(_list.ValueList[index]); } else { return(null); } } set { if (index <= _list.Count && index >= 0) { if (_list.ContainsKey(value.Name)) //같은이름이 존재하면. { if (_list[value.Name].Index != index) //그런데 다른 인덱스에 있는 Node라면.. { if (_list[value.Name].Equals(value)) //같은 인스턴스이면.. { throw new Exception("Remove the node[" + value.Name + "] from this collection before assign in the other position..."); } else //인스턴스가 다르다면 이름만 같은 것. { throw new Exception("the name to insert already exists in this collection - index:" + _list[value.Name].Index); } } else //같은 인덱스에 같은 이름으로 넣으려고 하면.. { if (_list.ValueList[index].Equals(value)) //같은 인스턴스라면 넣을 필요 없다. { //do nothing.. } else //다른 인스턴스라면..이름만 같고 다른 인스턴스이므로 기존의 것을 지워준다. { whenReleaseNode(_list[value.Name]);//기존것의 연결을 끊음. _list.Remove(value.Name);//리스트에서 삭제.. _list.Insert(value.Name, value, index); whenAddNode(value); if (E_TreeNodeChanged != null) { E_TreeNodeChanged(value, null); } } } } else //같은 이름이 존재하지 않으면..해당 index에 완전히 새로운 것을 넣어주는 것이다. { if (index < _list.Count) //index가 count와 같으면 지울 것이 없다. { wTreeNode nodeToRemove = _list.ValueList[index]; whenReleaseNode(nodeToRemove); //기존것의 연결을 끊음. _list.Remove(nodeToRemove.Name); //리스트에서 삭제.. _list.Insert(value.Name, value, index); whenAddNode(value); if (E_TreeNodeChanged != null) { E_TreeNodeChanged(value, null); } } else { _list.Add(value.Name, value); whenAddNode(value); if (E_TreeListChanged != null) { E_TreeListChanged(_parent); //새로 넣은 것이므로 리스트가 바뀌었슴. } } } } else { throw new Exception("wTree error: wTree[" + index + "] doesn't exist.."); } } }