/// <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(); }
/// <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); }
/// <summary> /// 子类的绘制 /// </summary> /// <param name="e"></param> public abstract void childPaint(PaintEventArgs e, PositionRectData rectPosData, Color GraphicalColor, Color TextColor);