RaUI/Source/ryControls/Sheng.Winform.Controls/ShengListView/ShengListViewItemCollection.cs
鑫Intel c3d4ddf574 ### 2021-07-29更新
------
#### MyDbV4   V3.0.2107.2901
- *.[新增]新增支持计算文件MD5。
- *.[新增]部分DataProvider功能移植到DbExtension里,增加扩展性。
- *.[新增]UnixTimeToDateTime和JSTimeToDateTime新增支持long参数。
- *.[合并]合并RyWeb项目到MyDb里。

#### ryControlsV4    V3.0.2107.2901
  -  *.[改进]优化减少大量IDE警告和消息。
2021-07-29 17:09:32 +08:00

386 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace Sheng.Winform.Controls
{
/// <summary>
///
/// </summary>
public class ShengListViewItemCollection : CollectionBase, IList<ShengListViewItem>
{
#region
/// <summary>
///
/// </summary>
public ShengListViewItemCollection()
{
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
public ShengListViewItemCollection(ShengListViewItemCollection value)
{
this.AddRange(value);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
public ShengListViewItemCollection(ShengListViewItem[] value)
{
this.AddRange(value);
}
/// <summary>
///
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public ShengListViewItem this[int index]
{
get
{
return ((ShengListViewItem)(List[index]));
}
set
{
List[index] = value;
}
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int Add(ShengListViewItem value)
{
value.OwnerCollection = this;
int index = List.Add(value);
_owner.Refresh();
return index;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
public void AddRange(ShengListViewItem[] value)
{
_owner.SuspendLayout();
for (int i = 0; (i < value.Length); i++)
{
this.Add(value[i]);
}
_owner.ResumeLayout(true);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
public void AddRange(ShengListViewItemCollection value)
{
_owner.SuspendLayout();
for (int i = 0; (i < value.Count); i++)
{
this.Add(value[i]);
}
_owner.ResumeLayout(true);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public bool Contains(ShengListViewItem value)
{
return List.Contains(value);
}
/// <summary>
///
/// </summary>
/// <param name="array"></param>
/// <param name="index"></param>
public void CopyTo(ShengListViewItem[] array, int index)
{
List.CopyTo(array, index);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public int IndexOf(ShengListViewItem value)
{
return List.IndexOf(value);
}
/// <summary>
///
/// </summary>
/// <param name="index"></param>
/// <param name="value"></param>
public void Insert(int index, ShengListViewItem value)
{
value.OwnerCollection = this;
List.Insert(index, value);
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
public void Remove(ShengListViewItem value)
{
value.OwnerCollection = null;
List.Remove(value);
_owner.Refresh();
_owner.OnItemsRemoved(new List<ShengListViewItem>() { value });
}
/// <summary>
///
/// </summary>
/// <param name="items"></param>
public void Remove(List<ShengListViewItem> items)
{
_owner.SuspendLayout();
foreach (var item in items)
{
item.OwnerCollection = null;
List.Remove(item);
}
_owner.ResumeLayout(true);
_owner.OnItemsRemoved(items);
}
/// <summary>
///
/// </summary>
protected override void OnClear()
{
_owner.SuspendLayout();
base.OnClear();
_owner.ResumeLayout(true);
}
#endregion
#region
private ShengListView _owner;
internal ShengListView Owner
{
get { return _owner; }
set { _owner = value; }
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ShengListViewItem[] ToArray()
{
return this.ToList().ToArray();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public List<ShengListViewItem> ToList()
{
List<ShengListViewItem> list = new List<ShengListViewItem>();
foreach (ShengListViewItem e in this)
{
list.Add(e);
}
return list;
}
/// <summary>
/// 将指定的事件移动到(紧邻)另一个事件之前
/// </summary>
/// <param name="targetEvent"></param>
/// <param name="referEvent"></param>
public void PreTo(ShengListViewItem targetEvent, ShengListViewItem referEvent)
{
if (targetEvent == null || referEvent == null)
return;
if (this.Contains(targetEvent) == false || this.Contains(referEvent) == false)
return;
//这里不能因为目标事件是最顶过就直接返回
//因为此方法的目的是把目标事件放在指定事件 紧挨着 的 前面 一个,而不是前面的任意位置
//有可能目标事件index是0指定事件是3那么此方法要把目标事件的index变为2
//如果指定事件已经是最顶个了,直接返回
//int targetIndex = this.IndexOf(targetEvent);
//if (targetIndex == 0)
// return;
int referIndex = this.IndexOf(referEvent);
//如果目标事件在指定事件之前的某个位置这里不能先直接remove目标事件
//因为这样会使指定事件提前一个index此时在referIndex上insert就跑到指定事件后面去了
//如果目标事件本身在指定事件之后,则无此问题
//先判断如果在前,就 referIndex--再insert
if (this.IndexOf(targetEvent) < referIndex)
referIndex--;
this.Remove(targetEvent);
this.Insert(referIndex, targetEvent);
}
/// <summary>
/// 将指定的事件移动到(紧邻)另一个事件之后
/// </summary>
/// <param name="targetEvent"></param>
/// <param name="referEvent"></param>
public void NextTo(ShengListViewItem targetEvent, ShengListViewItem referEvent)
{
if (targetEvent == null || referEvent == null)
return;
if (this.Contains(targetEvent) == false || this.Contains(referEvent) == false)
return;
//如果指定事件已经是最后个了,直接返回
//int targetIndex = this.IndexOf(targetEvent);
//if (targetIndex == this.Count - 1)
// return;
int referIndex = this.IndexOf(referEvent);
//这里在remove之前也要先判断目标事件是在指定事件之前还是之后
//如果在指定事件之后那么referIndex++,不然就insert到指定事件前面了
if (this.IndexOf(targetEvent) > referIndex)
referIndex++;
this.Remove(targetEvent);
this.Insert(referIndex, targetEvent);
}
#endregion
#region ImageListViewItemEnumerator
/// <summary>
///
/// </summary>
[Serializable]
public class ImageListViewItemEnumerator : object, IEnumerator, IEnumerator<ShengListViewItem>
{
private readonly IEnumerator baseEnumerator;
private readonly IEnumerable temp;
/// <summary>
///
/// </summary>
/// <param name="mappings"></param>
public ImageListViewItemEnumerator(ShengListViewItemCollection mappings)
{
this.temp = ((IEnumerable)(mappings));
this.baseEnumerator = temp.GetEnumerator();
}
/// <summary>
///
/// </summary>
public ShengListViewItem Current
{
get
{
return ((ShengListViewItem)(baseEnumerator.Current));
}
}
object IEnumerator.Current
{
get
{
return baseEnumerator.Current;
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public bool MoveNext()
{
return baseEnumerator.MoveNext();
}
bool IEnumerator.MoveNext()
{
return baseEnumerator.MoveNext();
}
/// <summary>
///
/// </summary>
public void Reset()
{
baseEnumerator.Reset();
}
void IEnumerator.Reset()
{
baseEnumerator.Reset();
}
#region IDisposable
/// <summary>
///
/// </summary>
public void Dispose()
{
}
#endregion
}
#endregion
#region ICollection<ImageListViewItem>
void ICollection<ShengListViewItem>.Add(ShengListViewItem item)
{
this.Add(item);
}
/// <summary>
///
/// </summary>
public bool IsReadOnly
{
get { return false; }
}
bool ICollection<ShengListViewItem>.Remove(ShengListViewItem item)
{
this.Remove(item);
return true;
}
#endregion
#region IEnumerable<ImageListViewItem>
/// <summary>
///
/// </summary>
/// <returns></returns>
public new IEnumerator<ShengListViewItem> GetEnumerator()
{
return new ImageListViewItemEnumerator(this);
}
#endregion
}
}