Exemple #1
0
        /// <summary>
        /// 绘制操作
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(PaintEventArgs e)
        {
            //自己声明的Graphics
            Graphics g = e.Graphics;

            if (backGroundColor != null)
            {
                Brush     background = new SolidBrush(backGroundColor);
                Rectangle rect       = new Rectangle(0, 0, this.Width, this.Height);
                g.FillRectangle(background, rect);
                background.Dispose();
            }
            if (adapter != null)
            {
                adapter.setIndex(-1);
                DataModel        data     = null;
                PositionRectData rectData = null;
                while (adapter.next())
                {
                    data     = adapter.getItem();
                    rectData = adapter.getPositionRect();
                    childPaint(e, rectData, myColor, TextColor);
                    rectData.right = this.Width;
                    list.Add(rectData);
                }

                introducePaint(g, currentData, myColor, TextColor);
            }
            //释放资源
            //utils.disposeGraphics(g);
            //g.Dispose();
        }
Exemple #2
0
        /// <summary>
        /// 鼠标移动判定是哪个数据被选中
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns>DataModel 基础数据类型</returns>
        private DataModel mouseMove(int x, int y)
        {
            //Console.WriteLine("x = {0}, y ={1}", x, y);
            //全部遍历太耗时;从y获取比较接近的index
            //如果panel的数据太多超过最大高度 Y会变为负数;
            if (y < 0)
            {
                y = -y;
                if (MaxHeight < y)
                {
                    MaxHeight = y;
                }
                y = MaxHeight + (MaxHeight - y);
            }
            //Console.WriteLine("x = {0}, y ={1}", x, y);
            int index = getIndexFromList(y);
            int size  = list.Count;

            Console.WriteLine("index = {0}, count = {1}", index, list.Count);
            PositionRectData item = null;
            int times             = 0;

            for (int i = index; i < size; i++)
            {
                item = list[i];
                times++;
                if (item.isInRect(x, y))
                {
                    if (currentIndex == i)
                    {
                        return(item.data);
                    }
                    currentIndex = i;
                    this.Invalidate();
                    currentData        = new CurrentPositionRectData(x, y, item.data);
                    popPanel.Location  = new Point(x, y);
                    popPanel.Width     = currentData.Width;
                    popPanel.Height    = currentData.Height;
                    popPanel.BackColor = Color.White;
                    //graphics.FillRectangle(new SolidBrush(Color.Black), rect);
                    return(item.data);
                }
            }
            Console.WriteLine("times = {0}", times);
            return(null);
        }
Exemple #3
0
 /// <summary>
 /// 子类的绘制
 /// </summary>
 /// <param name="e"></param>
 public abstract void childPaint(PaintEventArgs e, PositionRectData rectPosData, Color GraphicalColor, Color TextColor);