
选中后。


选中的效果其实是两张图片的交替结果,因为只针对了240×320这种样式,所以可能很多地方写死了,下面对部分源码的解析。
先定义一个继承自Control的类FlexStartMenu
public class FlexStartMenu : System.Windows.Forms.Control定义一个选项子类,因为这个控件中的图片中包含文字,因此我没有将子项的文字画到控件当中去,如果你们有需求的话可以修改OnPain事件,添加一个画文字的方法。
public class FlexStartItem
{ 
/**//// <summary>
/// 显示文本
/// </summary>
public string ItemText
{
get;
set;
}
/**//// <summary>
/// 选项图片
/// </summary>
public Image Icon
{
get;
set;
}
/**//// <summary>
/// 选中时的图片
/// </summary>
public Image PressIcon
{
get;
set;
}
/**//// <summary>
/// 选项距离顶部的距离
/// </summary>
public int Top
{
get;
set;
}
/**//// <summary>
/// 选项距离左边栏的距离
/// </summary>
public int Left
{
get;
set;
}
/**//// <summary>
/// 选项编号
/// </summary>
public int Index
{
get;
set;
}
/**//// <summary>
/// 是否被选中
/// </summary>
public bool Press
{
get;
set;
}
}用泛型的方法,比数组的方式效率要高多了,原先我是采用数组的方式,但在两百条数据的加载效率差得非常明显,具体的时间我没有去测试过,但可以肯定的是装箱拆箱这一步能跳过去的就尽量跳过去。
public class FlexStartItemCollections : CollectionBase
{
public void Remove(FlexStartItem value)
{
List.Remove(value);
}
public bool Contains(FlexStartItem value)
{
return (List.Contains(value));
}
public void Insert(int index, FlexStartItem value)
{
List.Insert(index, value);
}
public int IndexOf(FlexStartItem value)
{
return (List.IndexOf(value));
}
public int Add(FlexStartItem value)
{
return (List.Add(value));
}
public FlexStartItem this[int index]
{ 
get
{ return (FlexStartItem)List[index]; } 
set
{ List[index] = value; }
}
}核心部分来了:
public class FlexStartMenu : System.Windows.Forms.Control
{
public FlexStartMenu()
{
this.Items = new FlexStartItemCollections();
}
public FlexStartItemCollections Items
{
get;
set;
}
/**//// <summary>
/// 被选中的项
/// </summary>
public FlexStartItem SelectedItem
{
get
{
FlexStartItem m_item 评论总数:
条[ 查看全部 ] 网友评论

RSS订阅