/// <summary> /// 注册事件 /// </summary> /// <param name="control">控件</param> private void registerEvents(FCView control) { FCTouchEvent clickButtonEvent = new FCTouchEvent(clickButton); List <FCView> controls = control.getControls(); int controlsSize = controls.Count; for (int i = 0; i < controlsSize; i++) { FCView subControl = controls[i]; FCButton button = subControl as FCButton; FCGrid grid = subControl as FCGrid; if (button != null) { button.addEvent(clickButtonEvent, FCEventID.CLICK); } else if (grid != null) { FCGridRowStyle rowStyle = new FCGridRowStyle(); grid.RowStyle = rowStyle; rowStyle.BackColor = FCColor.None; rowStyle.SelectedBackColor = FCDraw.FCCOLORS_SELECTEDROWCOLOR; rowStyle.HoveredBackColor = FCDraw.FCCOLORS_HOVEREDROWCOLOR; rowStyle.SelectedTextColor = FCDraw.FCCOLORS_TEXTCOLOR4; } registerEvents(subControl); } }
/// <summary> /// 创建网格 /// </summary> public PropertyGrid() { BackColor = FCColor.Back; GridLineColor = FCColor.Border; RowStyle.HoveredBackColor = FCDraw.FCCOLORS_HOVEREDROWCOLOR; RowStyle.SelectedBackColor = FCDraw.FCCOLORS_SELECTEDROWCOLOR; RowStyle.SelectedTextColor = FCDraw.FCCOLORS_TEXTCOLOR4; RowStyle.Font = new FCFont("微软雅黑", 12, false, false, false); FCGridRowStyle alternateRowStyle = new FCGridRowStyle(); alternateRowStyle.BackColor = FCDraw.FCCOLORS_ALTERNATEROWCOLOR; alternateRowStyle.HoveredBackColor = FCDraw.FCCOLORS_HOVEREDROWCOLOR; alternateRowStyle.SelectedBackColor = FCDraw.FCCOLORS_SELECTEDROWCOLOR; alternateRowStyle.SelectedTextColor = FCDraw.FCCOLORS_TEXTCOLOR4; alternateRowStyle.Font = new FCFont("微软雅黑", 12, false, false, false); AlternateRowStyle = alternateRowStyle; m_assembly = Assembly.Load("facecat_net"); String content = ""; FCFile.read(DataCenter.GetAppPath() + "\\config\\CN_PROPERTIES.txt", ref content); String[] strs = content.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); int strsSize = strs.Length; for (int i = 0; i < strsSize; i++) { String[] subStrs = strs[i].Split(new String[] { "=" }, StringSplitOptions.RemoveEmptyEntries); m_chNames[subStrs[0].ToLower()] = subStrs[1]; } }
/// <summary> /// 重绘方法 /// </summary> /// <param name="paint">绘图对象</param> /// <param name="rect">矩形</param> /// <param name="clipRect">裁剪矩形</param> /// <param name="isAlternate">是否交替行</param> public override void onPaint(FCPaint paint, FCRect rect, FCRect clipRect, bool isAlternate) { int clipW = clipRect.right - clipRect.left; int clipH = clipRect.bottom - clipRect.top; FCGrid grid = Grid; FCGridRow row = Row; if (clipW > 0 && clipH > 0 && grid != null && Column != null && row != null && TargetColumn != null) { int width = rect.right - rect.left; int height = rect.bottom - rect.top; int scrollH = 0; FCHScrollBar hscrollBar = grid.HScrollBar; if (hscrollBar != null && hscrollBar.Visible) { scrollH = hscrollBar.Pos; } FCFont font = null; long backColor = FCColor.None; long textColor = FCColor.None; bool autoEllipsis = m_tree.AutoEllipsis; FCGridCellStyle style = Style; if (style != null) { if (style.AutoEllipsis) { autoEllipsis = style.AutoEllipsis; } backColor = style.BackColor; if (style.Font != null) { font = style.Font; } textColor = style.TextColor; } FCGridRowStyle rowStyle = grid.RowStyle; if (isAlternate) { FCGridRowStyle alternateRowStyle = grid.AlternateRowStyle; if (alternateRowStyle != null) { rowStyle = alternateRowStyle; } } if (rowStyle != null) { bool selected = false; ArrayList <FCGridRow> selectedRows = grid.SelectedRows; int selectedRowsSize = selectedRows.size(); for (int i = 0; i < selectedRowsSize; i++) { if (selectedRows[i] == row) { selected = true; break; } } if (backColor == FCColor.None) { //选中 if (selected) { backColor = rowStyle.SelectedBackColor; } //悬停 else if (Row == Grid.HoveredRow) { backColor = rowStyle.HoveredBackColor; } //普通 else { backColor = rowStyle.BackColor; } } if (font == null) { font = rowStyle.Font; } if (textColor == FCColor.None) { //选中 if (selected) { textColor = rowStyle.SelectedTextColor; } //悬停 else if (Row == Grid.HoveredRow) { textColor = rowStyle.HoveredTextColor; } //普通 else { textColor = rowStyle.TextColor; } } } //绘制背景 paint.fillRect(backColor, rect); FCRect headerRect = TargetColumn.Bounds; headerRect.left += Grid.HorizontalOffset - scrollH; headerRect.top += Grid.VerticalOffset - scrollH; int left = headerRect.left; //绘制复选框 if (m_tree.CheckBoxes) { int cw = m_tree.CheckBoxSize.cx; int ch = m_tree.CheckBoxSize.cy; FCRect checkBoxRect = new FCRect(); checkBoxRect.left = left; checkBoxRect.top = rect.top + (height - ch) / 2; checkBoxRect.right = checkBoxRect.left + cw; checkBoxRect.bottom = checkBoxRect.top + ch; onPaintCheckBox(paint, checkBoxRect); left += cw + 10; } //绘制折叠展开的标志 int nw = m_tree.NodeSize.cx; int nh = m_tree.NodeSize.cy; if (m_nodes.size() > 0) { FCRect nodeRect = new FCRect(); nodeRect.left = left; nodeRect.top = rect.top + (height - nh) / 2; nodeRect.right = nodeRect.left + nw; nodeRect.bottom = nodeRect.top + nh; onPaintNode(paint, nodeRect); } left += nw + 10; m_indent = left; String text = getPaintText(); //绘制文字 if (text != null) { FCSize tSize = paint.textSize(text, font); FCRect tRect = new FCRect(); tRect.left = left; tRect.top = rect.top + (row.Height - tSize.cy) / 2; tRect.right = tRect.left + tSize.cx; tRect.bottom = tRect.top + tSize.cy; if (autoEllipsis && (tRect.right < clipRect.right || tRect.bottom < clipRect.bottom)) { if (tRect.right < clipRect.right) { tRect.right = clipRect.right; } if (tRect.bottom < clipRect.bottom) { tRect.bottom = clipRect.bottom; } paint.drawTextAutoEllipsis(text, textColor, font, tRect); } else { paint.drawText(text, textColor, font, tRect); } } } onPaintControl(paint, rect, clipRect); }
/// <summary> /// 重绘方法 /// </summary> /// <param name="paint">绘图对象</param> /// <param name="rect">矩形</param> /// <param name="clipRect">裁剪矩形</param> /// <param name="isAlternate">是否交替行</param> public virtual void onPaint(FCPaint paint, FCRect rect, FCRect clipRect, bool isAlternate) { int clipW = clipRect.right - clipRect.left; int clipH = clipRect.bottom - clipRect.top; if (clipW > 0 && clipH > 0) { if (m_grid != null && m_row != null && m_column != null) { //判断选中 String text = getPaintText(); bool selected = false; if (m_grid.SelectionMode == FCGridSelectionMode.SelectCell) { ArrayList <FCGridCell> selectedCells = m_grid.SelectedCells; int selectedCellSize = selectedCells.size(); for (int i = 0; i < selectedCellSize; i++) { if (selectedCells.get(i) == this) { selected = true; break; } } } else if (m_grid.SelectionMode == FCGridSelectionMode.SelectFullColumn) { ArrayList <FCGridColumn> selectedColumns = m_grid.SelectedColumns; int selectedColumnsSize = selectedColumns.size(); for (int i = 0; i < selectedColumnsSize; i++) { if (selectedColumns.get(i) == m_column) { selected = true; break; } } } else if (m_grid.SelectionMode == FCGridSelectionMode.SelectFullRow) { ArrayList <FCGridRow> selectedRows = m_grid.SelectedRows; int selectedRowsSize = selectedRows.size(); for (int i = 0; i < selectedRowsSize; i++) { if (selectedRows.get(i) == m_row) { selected = true; break; } } } //获取颜色 FCFont font = null; long backColor = FCColor.None; long textColor = FCColor.None; bool autoEllipsis = m_grid.AutoEllipsis; FCHorizontalAlign horizontalAlign = m_column.CellAlign; if (m_style != null) { if (m_style.AutoEllipsis) { autoEllipsis = m_style.AutoEllipsis; } backColor = m_style.BackColor; if (m_style.Font != null) { font = m_style.Font; } textColor = m_style.TextColor; if (m_style.Align != FCHorizontalAlign.Inherit) { horizontalAlign = m_style.Align; } } FCGridRowStyle rowStyle = m_grid.RowStyle; if (isAlternate) { FCGridRowStyle alternateRowStyle = m_grid.AlternateRowStyle; if (alternateRowStyle != null) { rowStyle = alternateRowStyle; } } if (rowStyle != null) { if (backColor == FCColor.None) { if (selected) { backColor = rowStyle.SelectedBackColor; } else if (m_row == m_grid.HoveredRow) { backColor = rowStyle.HoveredBackColor; } else { backColor = rowStyle.BackColor; } } if (font == null) { font = rowStyle.Font; } if (textColor == FCColor.None) { if (selected) { textColor = rowStyle.SelectedTextColor; } else if (m_row == m_grid.HoveredRow) { textColor = rowStyle.HoveredTextColor; } else { textColor = rowStyle.TextColor; } } } paint.fillRect(backColor, rect); FCSize tSize = paint.textSize(text, font); FCPoint tPoint = new FCPoint(rect.left + 1, rect.top + clipH / 2 - tSize.cy / 2); int width = rect.right - rect.left; if (tSize.cx < width) { if (horizontalAlign == FCHorizontalAlign.Center) { tPoint.x = rect.left + (rect.right - rect.left - tSize.cx) / 2; } else if (horizontalAlign == FCHorizontalAlign.Right) { tPoint.x = rect.right - tSize.cx - 2; } } FCRect tRect = new FCRect(tPoint.x, tPoint.y, tPoint.x + tSize.cx, tPoint.y + tSize.cy); if (autoEllipsis && (tRect.right > clipRect.right || tRect.bottom > clipRect.bottom)) { if (tRect.right > clipRect.right) { tRect.right = clipRect.right; } if (tRect.bottom > clipRect.bottom) { tRect.bottom = clipRect.bottom; } paint.drawTextAutoEllipsis(text, textColor, font, tRect); } else { paint.drawText(text, textColor, font, tRect); } } } }