J2ME之家

匿名投稿 投稿指南 RSS订阅 J2ME通告:
搜索: 您的位置主页>Windows Mobile>

基于.NET CompactFramework的九宫格控件(附源码)

2008-8-20 22:03:38 来源:www.cnblogs.com 责任编辑: 【 点击: 我要投稿 [进入论坛]

 在网上经常看见有人询问Windows Mobile下的九宫格控件的做法,我曾经也多次上网搜索,但找到的大部分都是c++版本的,于是萌发了自己写一个的念头,先上图片。

     

     选中后。

    
    
选中的效果其实是两张图片的交替结果,因为只针对了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 

Tag:控件 源码 基于   < ///  public  if 
责任编辑:
  • 用户名: (新注册)密码: 匿名:  请文明参与讨论,禁止漫骂攻击。
    评论总数: [ 查看全部 ] 网友评论
    热门文章