/// <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> /// <param name="rectPosData"></param> /// <param name="GraphicalColor"></param> /// <param name="TextColor"></param> public abstract void introducePaint(Graphics g, CurrentPositionRectData rectPosData, Color GraphicalColor, Color TextColor);