private void folderTreeView_DrawNode(object sender, System.Windows.Forms.DrawTreeNodeEventArgs e) { // Draw default by default e.DrawDefault = true; if (e.Node.Text.Contains("Deleted")) { // Draw Deleted DrawAnnotatedText(e, this.DeletedCount, Color.Blue, "(", ")"); // Turn off drawing e.DrawDefault = false; } else if (e.Node.Text.Contains("Inbox")) { // Draw Inbox DrawAnnotatedText(e, this.UnreadCount, Color.Green, "[", "]"); // Turn off drawing e.DrawDefault = false; } else if (e.Node.Text.Contains("Drafts")) { // Draw Drafts DrawAnnotatedText(e, this.DraftsCount, Color.Blue, "(", ")"); // Turn off drawing e.DrawDefault = false; } }
// This method is here because by default TreeView try to display icon in every case // i.e. even when we have no icon to show it's going to put a blank space. So here we // detect when that happen and "shift" the text back in the right position 16px to the left internal static void DrawDocTreeNodeText (object sender, DrawTreeNodeEventArgs e) { if (!string.IsNullOrEmpty (e.Node.ImageKey)) { e.DrawDefault = true; return; } // Retrieve the node font. If the node font has not been set, // use the TreeView font. Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; // Draw the node text. var clip = new Rectangle (e.Bounds.X - 16, e.Bounds.Y, e.Bounds.Width + 16, e.Bounds.Height); e.Graphics.SetClip (clip); if ((e.State & TreeNodeStates.Selected) != 0) { e.Graphics.Clear (SystemColors.Highlight); using (var pen = new Pen (Color.Black)) { pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; e.Graphics.DrawRectangle (pen, new Rectangle (clip.Location, new Size (clip.Width - 1, clip.Height - 1))); } e.Graphics.DrawString (e.Node.Text, nodeFont, SystemBrushes.HighlightText, clip); } else { e.Graphics.Clear (Color.White); e.Graphics.DrawString (e.Node.Text, nodeFont, Brushes.Black, clip); } }
/// <summary> /// DrawNodeイベントを発生させます。 /// </summary> /// <param name="e">イベントデータを格納している<see cref="System.Windows.Forms.DrawTreeNodeEventArgs"/>。</param> protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if (!MultiLineLabel) base.OnDrawNode(e); else TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Bounds, this.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Left); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if (e.Node.IsVisible && null != e.Node.Tag) { if (e.Node.Tag is AttributeData) { e.DrawDefault = false; var data = (AttributeData) e.Node.Tag; e.Graphics.DrawString(data.Name, Font, _grayBrush, e.Bounds.X, e.Bounds.Y); var nameSize = e.Graphics.MeasureString(data.Name, Font); e.Graphics.DrawString(data.Value, Font, _blackPen.Brush, e.Bounds.X + nameSize.Width + 5, e.Bounds.Y); } else if (e.Node.Tag is PluginElementData) { e.DrawDefault = false; var data = (PluginElementData) e.Node.Tag; Bitmap icon; if ((icon = GetIcon(data.IconPath)) != null) e.Graphics.DrawImage(icon, e.Bounds.X, e.Bounds.Y, 16, 16); e.Graphics.DrawString(data.Name, Font, _blackPen.Brush, e.Bounds.X + 20, e.Bounds.Y); } } else e.DrawDefault = true; base.OnDrawNode(e); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { base.OnDrawNode(e); //节点背景绘制 if (e.Node.IsSelected) { e.Graphics.DrawImage(Resources.tree_Selected, e.Bounds); } else if ((e.State & TreeNodeStates.Hot) != 0)//|| currentMouseMoveNode == e.Node) { e.Graphics.DrawImage(Resources.tree_Hover, e.Bounds); } else { e.Graphics.FillRectangle(Brushes.White, e.Bounds); } //节点头图标绘制 if (e.Node.IsExpanded) { e.Graphics.DrawImage(Resources.tree_NodeExpend, e.Node.Bounds.X - 12, e.Node.Bounds.Y + 9); } else if (e.Node.IsExpanded == false && e.Node.Nodes.Count > 0) { e.Graphics.DrawImage(Resources.tree_NodeCollaps, e.Node.Bounds.X - 12, e.Node.Bounds.Y + 9); } //文本绘制 using (Font foreFont = new Font(this.Font, FontStyle.Regular)) using (Brush drawTextBrush = new SolidBrush(drawTextColor)) { e.Graphics.DrawString(e.Node.Text, foreFont, drawTextBrush, e.Node.Bounds.Left + 5, e.Node.Bounds.Top + 1); } }
internal static void DrawSearchResultNodeText (object sender, DrawTreeNodeEventArgs e) { Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; var clip = new Rectangle (0, e.Bounds.Y, e.Node.TreeView.Width, e.Bounds.Height); e.Graphics.SetClip (clip); var selectedStates = TreeNodeStates.Marked | TreeNodeStates.Selected | TreeNodeStates.Focused; if (e.Node.Tag == null) { nodeFont = new Font (nodeFont.FontFamily, nodeFont.Size - 2); // We use a TabRenderer to get the nice system gradient e.Graphics.Clear (Color.White); clip = new Rectangle (1, e.Bounds.Y + 1, e.Node.TreeView.ClientRectangle.Width - 3, e.Bounds.Height - 3); // If we're using the classic theme, then we can't use TabRender. Fall back to a simpler view. if (TabRenderer.IsSupported) { TabRenderer.DrawTabItem(e.Graphics, clip, e.Node.Text, nodeFont, System.Windows.Forms.VisualStyles.TabItemState.Normal); } else { e.Graphics.FillRectangle(SystemBrushes.ActiveCaption, clip); // The fallback rendering has more empty space than the tab rendering. Take advantage of it. var fallbackNodeFont = new Font(nodeFont.FontFamily, nodeFont.Size + 2); e.Graphics.DrawString(e.Node.Text, fallbackNodeFont, SystemBrushes.ActiveCaptionText, clip.X, clip.Y); } using (var pen = new Pen (Color.Black, 1.0f)) e.Graphics.DrawLine (pen, new Point (clip.Left, clip.Bottom), new Point (clip.Right - 1, clip.Bottom)); } else { e.Graphics.Clear ((e.State & selectedStates) != 0 ? SystemColors.Highlight : SystemColors.ControlLightLight); e.Graphics.DrawString (e.Node.Text, nodeFont, (e.State & selectedStates) != 0 ? SystemBrushes.HighlightText : SystemBrushes.ControlText, new PointF (e.Bounds.X, e.Bounds.Y + 2)); } }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { try { Rectangle Bounds = new Rectangle(e.Bounds.Location.X, e.Bounds.Location.Y, e.Bounds.Width, e.Bounds.Height); //e.Node.Nodes.Item. switch (State) { case TreeNodeStates.Default: e.Graphics.FillRectangle(Brushes.Red, Bounds); e.Graphics.DrawString(e.Node.Text, new Font("Segoe UI", 8), Brushes.LimeGreen, new Rectangle(Bounds.X + 2, Bounds.Y + 2, Bounds.Width, Bounds.Height), Helpers.NearSF); Invalidate(); break; case TreeNodeStates.Checked: e.Graphics.FillRectangle(Brushes.Green, Bounds); e.Graphics.DrawString(e.Node.Text, new Font("Segoe UI", 8), Brushes.Black, new Rectangle(Bounds.X + 2, Bounds.Y + 2, Bounds.Width, Bounds.Height), Helpers.NearSF); Invalidate(); break; case TreeNodeStates.Selected: e.Graphics.FillRectangle(Brushes.Green, Bounds); e.Graphics.DrawString(e.Node.Text, new Font("Segoe UI", 8), Brushes.Black, new Rectangle(Bounds.X + 2, Bounds.Y + 2, Bounds.Width, Bounds.Height), Helpers.NearSF); Invalidate(); break; } } catch (Exception ex) { MessageBox.Show(ex.Message); } base.OnDrawNode(e); }
private void OnDrawNode(object sender, DrawTreeNodeEventArgs e) { if ((e.State & TreeNodeStates.Selected) != 0) { var backColor = ((e.State & TreeNodeStates.Focused) != 0) ? Configuration.DefaultFocusedColor : BackColor ; e.Graphics.FillRectangle(new SolidBrush(backColor), NodeBounds(e.Node)); // Retrieve the node font. If the node font has not been set, // use the TreeView font. var nodeFont = e.Node.NodeFont ?? ((TreeView) sender).Font; // Draw the node text. e.Graphics.DrawString(e.Node.Text, nodeFont, new SolidBrush(ForeColor), Rectangle.Inflate(e.Bounds, 2, 0)); } else { e.DrawDefault = true; } // if ((e.State & TreeNodeStates.Focused) == 0) return; // // using(var focusBrush = new SolidBrush(Configuration.DefaultFocusedColor)) // { // focusBrush.Color = Color.FromArgb(100, focusBrush.Color.R, focusBrush.Color.G, focusBrush.Color.B); // var focusBounds = NodeBounds(e.Node); // focusBounds.Size = new Size(focusBounds.Width - 1, // focusBounds.Height - 1); //// e.Graphics.DrawRectangle(focusPen, focusBounds); // e.Graphics.FillRectangle(focusBrush,focusBounds); // } }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { TreeNodeStates state = e.State; Font font = e.Node.NodeFont ?? e.Node.TreeView.Font; Color fore = e.Node.ForeColor; Rectangle rect = new Rectangle(); if (fore == Color.Empty) fore = e.Node.TreeView.ForeColor; if (e.Node == e.Node.TreeView.SelectedNode) { fore = SystemColors.HighlightText; rect = new Rectangle(0, e.Bounds.Y, e.Node.TreeView.Width, e.Node.Bounds.Height); e.Graphics.FillRectangle(new SolidBrush(e.Node.BackColor), rect); //ControlPaint.DrawFocusRectangle(e.Graphics, rect, fore, Color.Red); TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, e.Node.BackColor, TextFormatFlags.GlyphOverhangPadding | TextFormatFlags.VerticalCenter); } else { rect = new Rectangle(0, e.Bounds.Y, e.Node.TreeView.Width, e.Node.Bounds.Height); e.Graphics.FillRectangle(new SolidBrush(Parent.BackColor), rect); TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, TextFormatFlags.GlyphOverhangPadding | TextFormatFlags.VerticalCenter); } base.OnDrawNode(e); }
void State_DrawNode (object sender, DrawTreeNodeEventArgs e) { if (!(e.Node.Tag is TreeNode_StateTag)) { return; } e.DrawDefault = false; TreeNode_StateTag state_tag = (TreeNode_StateTag)e.Node.Tag; State state = state_tag.state; string[] texts = e.Node.Text.Split(); using (Brush black = new SolidBrush(Color.Black)) { using (Brush blue = new SolidBrush(Color.Blue)) { using (Brush red = new SolidBrush(Color.Red)) { using (Brush yellow = new SolidBrush(Color.DarkOrange)) { Brush[] brushes = new Brush[] { blue, red, yellow, red, blue, blue, red, yellow, red, blue }; SizeF offset = new SizeF(); string panels = texts[0]; for (int i = 0; i < panels.Length; ++i) { String p = "" + panels[i]; e.Graphics.DrawString(p, tree.Font, brushes[i], e.Bounds.Left + (int)offset.Width, e.Bounds.Top); offset += e.Graphics.MeasureString(p, tree.Font); } for (int i = 1; i < texts.Length; ++i) { string txt = texts[i]; e.Graphics.DrawString(txt, tree.Font, black, e.Bounds.Left + (int)offset.Width, e.Bounds.Top); offset += e.Graphics.MeasureString(txt, tree.Font); } } } } } }
void AnalysisTreeView_DrawNode(object sender, System.Windows.Forms.DrawTreeNodeEventArgs e) { try { // get NodeTag NodeTag tag = e.Node.Tag as NodeTag; if (null == tag) { throw new Exception(string.Format("Node {0} has null tag", e.Node.Text)); } Rectangle nodeBounds = e.Node.Bounds; if (null != tag.ItemProperties) { TextRenderer.DrawText(e.Graphics, tag.ItemProperties.Name, Font, nodeBounds, System.Drawing.Color.Black, Color.Transparent, TextFormatFlags.VerticalCenter | TextFormatFlags.NoClipping); } else { TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, nodeBounds, System.Drawing.Color.Black, Color.Transparent, TextFormatFlags.VerticalCenter | TextFormatFlags.NoClipping); } } catch (Exception ex) { _log.Error(ex.Message); } }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if ((OnDrawNodeField != null) && (OnDrawNodeField.GetValue(this) == null)) { e.DrawDefault = true; } base.OnDrawNode(e); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { e.Graphics.DrawString (e.Node.Text.Split (';') [0], new Font ("Microsoft Sans Serif", 13), new SolidBrush (Color.Black), e.Bounds.X, e.Bounds.Y); e.Graphics.DrawString (e.Node.Text.Split (';') [1], new Font ("Microsoft Sans Serif", 9), new SolidBrush (Color.Black), e.Bounds.X + 10, e.Bounds.Y+15); base.OnDrawNode (e); }
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { e.DrawDefault = true; Rectangle rect = e.Bounds; if ((e.State & TreeNodeStates.Selected) != 0) { if ((e.State & TreeNodeStates.Focused) != 0) e.Graphics.FillRectangle(SystemBrushes.Highlight, rect); else e.Graphics.FillRectangle(SystemBrushes.Control, rect); } else e.Graphics.FillRectangle(Brushes.White, rect); e.Graphics.DrawRectangle(SystemPens.Control, rect); for (int intColumn = 1; intColumn < this.listView1.Columns.Count; intColumn++) { rect.Offset(this.listView1.Columns[intColumn - 1].Width, 0); rect.Width = this.listView1.Columns[intColumn].Width; e.Graphics.DrawRectangle(SystemPens.Control, rect); string strColumnText; string[] list = e.Node.Tag as string[]; if (list != null && intColumn<=list.Length) strColumnText = list[intColumn - 1]; else strColumnText = e.Node.Text; // dummy TextFormatFlags flags = TextFormatFlags.EndEllipsis; switch(this.listView1.Columns[intColumn].TextAlign) { case HorizontalAlignment.Center: flags |= TextFormatFlags.HorizontalCenter; break; case HorizontalAlignment.Left: flags |= TextFormatFlags.Left; break; case HorizontalAlignment.Right: flags |= TextFormatFlags.Right; break; default: break; } rect.Y++; if ((e.State & TreeNodeStates.Selected) != 0 && (e.State & TreeNodeStates.Focused) != 0) TextRenderer.DrawText(e.Graphics, strColumnText, e.Node.NodeFont, rect, SystemColors.HighlightText, flags); else TextRenderer.DrawText(e.Graphics, strColumnText, e.Node.NodeFont, rect, e.Node.ForeColor, e.Node.BackColor, flags); rect.Y--; } }
protected override int MeasureItemWidth(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; int x = MeasureTextWidth(g, positionText, BoldMonospacedFont); // if (line != null && !line.IsDeleted) { // x += MeasureTextWidth(g, bookmark.Document.GetText(line).Replace("\t", " "), BoldMonospacedFont); // } return x; }
/// <summary> /// Override draw event to draw appended Control text to RegisterTreeNode. /// </summary> protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if (e.Node is RegisterTreeNode) { e.Graphics.DrawString((e.Node as RegisterTreeNode).Control.Text, Font, new SolidBrush((e.Node as RegisterTreeNode).CreateTextColor()), e.Bounds.Right, e.Bounds.Top); } e.DrawDefault = true; base.OnDrawNode(e); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { TreeNodeStates treeState = e.State; Font treeFont = e.Node.NodeFont ?? e.Node.TreeView.Font; Font hotFont = e.Node.NodeFont ?? e.Node.TreeView.Font; // Colors. Color foreColor = e.Node.ForeColor; string strDeselectedColor = @"#6B6E77", strSelectedColor = @"#94C7FC"; Color selectedColor = System.Drawing.ColorTranslator.FromHtml(strSelectedColor); Color deselectedColor = System.Drawing.ColorTranslator.FromHtml(strDeselectedColor); // New brush. SolidBrush selectedTreeBrush = new SolidBrush(selectedColor); SolidBrush deselectedTreeBrush = new SolidBrush(deselectedColor); // Set default font color. if (foreColor == Color.Empty) foreColor = e.Node.TreeView.ForeColor; // Draw bounding box and fill. if (e.Node == e.Node.TreeView.SelectedNode) { // Use appropriate brush depending on if the tree has focus. if (this.Focused) { foreColor = SystemColors.HighlightText; e.Graphics.FillRectangle(selectedTreeBrush, e.Bounds); ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, foreColor, SystemColors.Highlight); TextRenderer.DrawText(e.Graphics, e.Node.Text, treeFont, e.Bounds, foreColor, TextFormatFlags.GlyphOverhangPadding); } else { foreColor = SystemColors.HighlightText; e.Graphics.FillRectangle(deselectedTreeBrush, e.Bounds); ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, foreColor, SystemColors.Highlight); TextRenderer.DrawText(e.Graphics, e.Node.Text, treeFont, e.Bounds, foreColor, TextFormatFlags.GlyphOverhangPadding); } } else { if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot) { e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); TextRenderer.DrawText(e.Graphics, e.Node.Text, hotFont, e.Bounds, System.Drawing.Color.Black, TextFormatFlags.GlyphOverhangPadding); } else { e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); TextRenderer.DrawText(e.Graphics, e.Node.Text, treeFont, e.Bounds, foreColor, TextFormatFlags.GlyphOverhangPadding); } } }
private void OnDrawNode(object sender, DrawTreeNodeEventArgs e) { TestTreeNode node = e.Node as TestTreeNode; if( node != null ) { node.OnDrawNode(sender, e); } else { e.DrawDefault = true; } return; //e.DrawDefault = true; //return; // Draw the background and node text for a selected node. if ((e.State & TreeNodeStates.Selected) != 0) { // Draw the background of the selected node. The NodeBounds // method makes the highlight rectangle large enough to // include the text of a node tag, if one is present. Rectangle bounds = NodeBounds(e.Node); e.Graphics.FillRectangle(Brushes.Green, bounds); // Retrieve the node font. If the node font has not been set, // use the TreeView font. Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; // Draw the node text. //e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, 2, 2); e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, bounds.Left, bounds.Top); //Rectangle.Inflate(e.Bounds, 2, 0)); } // Use the default background and node text. else { e.DrawDefault = true; } // If a node tag is present, draw its string representation // to the right of the label text. if (e.Node.Tag != null) { e.Graphics.DrawString(e.Node.Tag.ToString(), _tagFont, Brushes.Red, e.Bounds.Right + 2, e.Bounds.Top); } // If the node has focus, draw the focus rectangle large, making // it large enough to include the text of the node tag, if present. if ((e.State & TreeNodeStates.Focused) != 0) { using (Pen focusPen = new Pen(Color.Black)) { focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; Rectangle focusBounds = NodeBounds(e.Node); focusBounds.Size = new Size(focusBounds.Width - 1, focusBounds.Height - 1); e.Graphics.DrawRectangle(focusPen, focusBounds); } } }
internal override void DrawNode(DrawTreeNodeEventArgs e) { CheckBoxRenderer.DrawCheckBox( e.Graphics, new Point(this.Bounds.X - 14, this.Bounds.Y + 1), _state ? CheckBoxState.CheckedNormal : CheckBoxState.UncheckedNormal ); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; SizeF textSize = e.Graphics.MeasureString(e.Node.Text, oRAFonts.Font_SubDescription); //Because the bounds of the replay list include vertical scrollbar bounds int actualWidth = Width - new VScrollBar().Width - 2; e.Graphics.FillRectangle(new SolidBrush(e.Node.IsSelected ? oRAColours.Colour_Item_BG_0 : oRAColours.Colour_BG_P0), new Rectangle(e.Bounds.Left, e.Bounds.Y, Width, e.Bounds.Height)); e.Graphics.DrawString(e.Node.Text, oRAFonts.Font_SubDescription, new SolidBrush(e.Node.IsSelected ? oRAColours.Colour_Text_H : oRAColours.Colour_Text_N), new RectangleF(new PointF(e.Bounds.Left + 5, e.Bounds.Y + e.Bounds.Height / 2f - textSize.Height / 2), new SizeF(actualWidth - 5, textSize.Height)), format); }
protected override int MeasureItemWidth(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; int x = MeasureTextWidth(g, fileNameText, RegularBigFont); x += MeasureTextWidth(g, occurences, ItalicBigFont); if (icon != null) { x += icon.Width; } return x + 3; }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { const int SPACE_IL = 3; // space between Image and Label // we only do additional drawing //e.DrawDefault = true; base.OnDrawNode(e); if (base.ShowLines && base.ImageList != null && e.Node.ImageIndex == NOIMAGE // exclude root nodes, if root lines are disabled //&& (base.ShowRootLines || e.Node.Level > 0)) ) { // Using lines & images, but this node has none: fill up missing treelines // Image size int imgW = base.ImageList.ImageSize.Width; int imgH = base.ImageList.ImageSize.Height; // Image center int xPos = e.Node.Bounds.Left - SPACE_IL - imgW / 2; int yPos = (e.Node.Bounds.Top + e.Node.Bounds.Bottom) / 2; // Image rect Rectangle imgRect = new Rectangle(xPos, yPos, 0, 0); imgRect.Inflate(imgW / 2, imgH / 2); using (Pen p = new Pen(base.LineColor, 1)) { p.DashStyle = DashStyle.Custom; // account uneven Indent for both lines p.DashOffset = base.Indent % 2; // Horizontal treeline across width of image // account uneven half of delta ItemHeight & ImageHeight int yHor = yPos + ((base.ItemHeight - imgRect.Height) / 2) % 2; e.Graphics.DrawLine(p, (base.ShowRootLines || e.Node.Level > 0) ? imgRect.Left : xPos - (int)p.DashOffset, yHor, imgRect.Right, yHor); if (!base.CheckBoxes && e.Node.IsExpanded) { // Vertical treeline , offspring from NodeImage center to e.Node.Bounds.Bottom // yStartPos: account uneven Indent and uneven half of delta ItemHeight & ImageHeight int yVer = yHor + (int)p.DashOffset; e.Graphics.DrawLine(p, xPos, yVer, xPos, e.Node.Bounds.Bottom); } } } }
protected override int MeasureItemWidth(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; int x = MeasureTextWidth(g, displayText, BoldMonospacedFont); if (ShowFileName) { float tabWidth = drawableLine.GetSpaceSize(g).Width * 6; x = (int)((int)((x + 2 + tabWidth) / tabWidth) * tabWidth); x += MeasureTextWidth(g, FileNameText, ItalicBigFont); } return x; }
protected override void DrawForeground(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; float x = e.Bounds.X; if (icon != null) { g.DrawImage(icon, x, e.Bounds.Y, icon.Width, icon.Height); x += icon.Width + 2; } DrawText(e, fileNameText, SystemBrushes.WindowText, RegularBigFont, ref x); DrawText(e, occurences, SystemBrushes.GrayText, ItalicBigFont, ref x); }
protected override void DrawForeground(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; float x = e.Bounds.X; DrawText(e, positionText, SystemBrushes.WindowText, RegularBigFont, ref x); spaceSize = g.MeasureString("-", RegularBigFont, new PointF(0, 0), StringFormat.GenericTypographic); // if (line != null && !line.IsDeleted) { // DrawLine(g, line, e.Bounds.Y, x, e.State); // } }
void MyTree_DrawNode(object sender, DrawTreeNodeEventArgs e) { Brush pen = Brushes.Black; if ((e.State & TreeNodeStates.Selected) != 0) { //演示为蓝底白字 e.Graphics.FillRectangle(Brushes.Blue, e.Node.Bounds); pen = Brushes.White; } Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; int topPadding = (int)Math.Abs((e.Node.Bounds.Height - nodeFont.GetHeight()) / 2); Rectangle r = new Rectangle(e.Bounds.X, e.Bounds.Y + topPadding, e.Bounds.Width + 5, e.Bounds.Height - topPadding * 2); e.Graphics.DrawString(e.Node.Text, nodeFont, pen, r); }
// Create a Font object for the node tags. //TODO: Have code that isn't copied from MSDN... private static void myTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { // Draw the background and node text for a selected node. if ((e.State & TreeNodeStates.Selected) != 0) { Rectangle rect = NodeBounds(e.Node); rect.Width += 5; e.Graphics.FillRectangle(Brushes.Gray, rect); Font nodeFont = e.Node.TreeView.Font; //if (nodeFont == null) nodeFont = ((TreeView)sender).Font; Rectangle bounds = NodeBounds(e.Node); bounds.Width += 10; e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, bounds); e.DrawDefault = false; } // Use the default background and node text. else { e.DrawDefault = true; } /* // If a node tag is present, draw its string representation // to the right of the label text. if (e.Node.Tag != null) { e.Graphics.DrawString(e.Node.Tag.ToString(), e.Node.TreeView.Font, Brushes.Yellow, e.Bounds.Right + 2, e.Bounds.Top); } // If the node has focus, draw the focus rectangle large, making // it large enough to include the text of the node tag, if present. if ((e.State & TreeNodeStates.Focused) != 0) { using (Pen focusPen = new Pen(Color.Black)) { focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; Rectangle focusBounds = NodeBounds(e.Node); focusBounds.Size = new Size(focusBounds.Width - 1, focusBounds.Height - 1); e.Graphics.DrawRectangle(focusPen, focusBounds); } }*/ }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { Font font = e.Node.NodeFont ?? e.Node.TreeView.Font; Color fore = e.Node.ForeColor; if (fore == Color.Empty) fore = e.Node.TreeView.ForeColor; if (e.Node == e.Node.TreeView.SelectedNode) { fore = SystemColors.HighlightText; e.Graphics.FillRectangle (SystemBrushes.MenuHighlight, e.Bounds); ControlPaint.DrawFocusRectangle (e.Graphics, e.Bounds, fore, SystemColors.Highlight); TextRenderer.DrawText (e.Graphics, e.Node.Text, font, e.Bounds, fore, TextFormatFlags.GlyphOverhangPadding); } else { e.Graphics.FillRectangle (SystemBrushes.Window, e.Bounds); TextRenderer.DrawText (e.Graphics, e.Node.Text, font, e.Bounds, fore, TextFormatFlags.GlyphOverhangPadding); } }
void OPMTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) { bool isFocused = (e.State & TreeNodeStates.Focused) == TreeNodeStates.Focused; bool isSelected = (e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected; if (isFocused == false && isSelected == false && e.Node.IsSelected == false) { e.DrawDefault = true; return; } ThemeManager.PrepareGraphics(e.Graphics); Font f = e.Node.NodeFont; if (f == null) { f = this.Font; } if (f == null) { f = ThemeManager.NormalFont; } SizeF sz = e.Graphics.MeasureString(e.Node.Text, f); Rectangle rc = new Rectangle(e.Bounds.Left, e.Bounds.Top, (int)sz.Width + 4, e.Bounds.Height - 1); Rectangle rcx = e.Bounds; rcx.Inflate(2, 2); using (Brush b = new SolidBrush(ThemeManager.BackColor)) using (Brush bBack = new SolidBrush(ThemeManager.SelectedColor)) using (Brush bFore = new SolidBrush(ThemeManager.ForeColor)) { e.Graphics.FillRectangle(b, rcx); e.Graphics.FillRectangle(bBack, rc); StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; sf.FormatFlags = StringFormatFlags.NoWrap; sf.Trimming = StringTrimming.EllipsisWord; e.Graphics.DrawString(e.Node.Text, f, bFore, rc, sf); } }
void LegendControl_DrawNode(object sender, DrawTreeNodeEventArgs e) { if (e.Node.Level == 0) { //����ͼ����Ͻڵ� this.DrawLayerGroupNode(e); } else if (e.Node.Level == 1) { //����Ϳ��ڵ� this.DrawLayerNode(e); } else if (e.Node.Level == 2) { //������ɫ���нڵ� this.DrawColorSchemdualNode(e); } }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { Graphics g = e.Graphics; TreeNode n = e.Node; Font f = Font; int indent = 20 * e.Node.Level; string text = e.Node.Text; string[] lines = text.Split('\n'); int width = 0; foreach (string line in lines) { int lineWidth = TextRenderer.MeasureText(line, f).Width; if (lineWidth > width) width = lineWidth; } Rectangle bounds = new Rectangle(e.Bounds.X+indent, e.Bounds.Y, Math.Max(width+4, Width-indent), e.Bounds.Height); Rectangle textRect = Rectangle.Inflate(bounds, 1, 0); // to align with mouse-over tooltip TextFormatFlags format = TextFormatFlags.Top; if (e.Node.Tag == null) // category, center it { f = new Font(f.Name, f.Size*1.5f, f.Style, f.Unit); format = TextFormatFlags.VerticalCenter; } format |= TextFormatFlags.NoPrefix; g.FillRectangle(SystemBrushes.Window, e.Bounds); if ((e.State & TreeNodeStates.Selected) != 0 || (e.State & TreeNodeStates.Grayed) != 0) { g.FillRectangle(SystemBrushes.Highlight, bounds); TextRenderer.DrawText(g, text, f, textRect, SystemColors.HighlightText, SystemColors.Highlight, format); } else TextRenderer.DrawText(g, text, f, textRect, SystemColors.WindowText, SystemColors.Window, format); g.DrawLine(SystemPens.ControlLight, bounds.Left, bounds.Bottom-1, Width, bounds.Bottom-1); base.OnDrawNode(e); }
private void AdvancedTreeView_DrawNode(object sender, System.Windows.Forms.DrawTreeNodeEventArgs e) { if (this.NodeTextChanging) { if (e.Node != this.SelectedNode || this.snDrawed) { return; } this.snDrawed = true; } else { this.snDrawed = false; } Color TextColor = this.ForeColor; Rectangle NodeBounds = this.GetNodeBounds(e.Node); if ((e.State & TreeNodeStates.Selected) != 0 || e.Node == this.SelectedNode) { e.Graphics.FillRectangle(SystemBrushes.Highlight, NodeBounds); TextColor = SystemColors.HighlightText; using (Pen FocusPen = new Pen(Color.Black)) { FocusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot; NodeBounds.Size = new Size(NodeBounds.Width - 1, NodeBounds.Height - 1); e.Graphics.DrawRectangle(FocusPen, NodeBounds); } } else if (e.Node.Parent != null && !((TreeNodeEx)e.Node).Enabled) { TextColor = Color.Gray; } string index_string = ""; if (e.Node.Parent != null) { index_string = ((TreeNodeEx)e.Node).Enabled ? this.GetNodeIndexWODisabledNodes(e.Node.Parent, e.Node) + ". " : " "; } e.Graphics.DrawString(index_string + e.Node.Text, this.Font, new SolidBrush(TextColor), e.Bounds.Location); }
internal static void DrawSearchResultNodeText (object sender, DrawTreeNodeEventArgs e) { Font nodeFont = e.Node.NodeFont; if (nodeFont == null) nodeFont = ((TreeView)sender).Font; var clip = new Rectangle (0, e.Bounds.Y, e.Node.TreeView.Width, e.Bounds.Height); e.Graphics.SetClip (clip); var selectedStates = TreeNodeStates.Marked | TreeNodeStates.Selected | TreeNodeStates.Focused; if (e.Node.Tag == null) { nodeFont = new Font (nodeFont.FontFamily, nodeFont.Size - 2); // We use a TabRenderer to get the nice system gradient e.Graphics.Clear (Color.White); clip = new Rectangle (1, e.Bounds.Y + 1, e.Node.TreeView.ClientRectangle.Width - 3, e.Bounds.Height - 3); TabRenderer.DrawTabItem (e.Graphics, clip, e.Node.Text, nodeFont, System.Windows.Forms.VisualStyles.TabItemState.Normal); using (var pen = new Pen (Color.Black, 1.0f)) e.Graphics.DrawLine (pen, new Point (clip.Left, clip.Bottom), new Point (clip.Right - 1, clip.Bottom)); } else { e.Graphics.Clear ((e.State & selectedStates) != 0 ? SystemColors.Highlight : SystemColors.ControlLightLight); e.Graphics.DrawString (e.Node.Text, nodeFont, (e.State & selectedStates) != 0 ? SystemBrushes.HighlightText : SystemBrushes.ControlText, new PointF (e.Bounds.X, e.Bounds.Y + 2)); } }
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { //treeView1.BeginUpdate(); #region 1 选中的节点背景========================================= Rectangle nodeRect = new Rectangle(1, e.Bounds.Top, e.Bounds.Width - 3, e.Bounds.Height - 1); if (e.Node.IsSelected) { //TreeView有焦点的时候 画选中的节点 if (treeView1.Focused || textBox1.Visible) { e.Graphics.FillRectangle(brush1, nodeRect); e.Graphics.DrawRectangle(pen1, nodeRect); /*测试 画聚焦的边框*/ //ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, Color.Black, SystemColors.Highlight); } /*TreeView失去焦点的时候 */ else { e.Graphics.FillRectangle(brush2, nodeRect); e.Graphics.DrawRectangle(pen2, nodeRect); } } else if ((e.State & TreeNodeStates.Hot) != 0 && e.Node.Text != "")//|| currentMouseMoveNode == e.Node) { e.Graphics.FillRectangle(brush3, nodeRect); e.Graphics.DrawRectangle(pen3, nodeRect); } else { e.Graphics.FillRectangle(new SolidBrush(treeView1.BackColor), e.Bounds); } #endregion #region 2 +-号绘制========================================= Rectangle plusRect = new Rectangle(e.Node.Bounds.Left - 32, nodeRect.Top + 7, 9, 9); // +-号的大小 是9 * 9 if (e.Node.IsExpanded && e.Node.Nodes.Count > 0) { //treeView1.Refresh(); for (int i = 0; i < treeView1.Nodes.Count; i++) { e.Graphics.DrawImage(minusPictureBox1.Image, plusRect); } } else if (e.Node.IsExpanded == false && e.Node.Nodes.Count > 0) { //treeView1.Refresh(); for (int i = 0; i < treeView1.Nodes.Count; i++) { e.Graphics.DrawImage(plusPictureBox1.Image, plusRect); } } TreeViewHitTestInfo info = treeView1.HitTest(pt); if (treeNode1 != null && info.Location == TreeViewHitTestLocations.PlusMinus && treeNode1 == e.Node) { if (treeNode1.IsExpanded && treeNode1.Nodes.Count > 0) { e.Graphics.DrawImage(minusPictureBox2.Image, plusRect); } else if (treeNode1.IsExpanded == false && treeNode1.Nodes.Count > 0) { e.Graphics.DrawImage(plusPictureBox2.Image, plusRect); } } /*测试用 画出+-号出现的矩形*/ //if (e.Node.Nodes.Count > 0) // e.Graphics.DrawRectangle(new Pen(Color.Red), plusRect); #endregion #region 3 画节点文本========================================= Rectangle nodeTextRect = new Rectangle( e.Node.Bounds.Left, e.Node.Bounds.Top + 2, e.Node.Bounds.Width + 2, e.Node.Bounds.Height ); nodeTextRect.Width += 4; nodeTextRect.Height -= 4; e.Graphics.DrawString(e.Node.Text, e.Node.TreeView.Font, new SolidBrush(treeView1.ForeColor), nodeTextRect); ////画子节点上文件的个数 (111) if (e.Node.Text != "" && Directory.Exists(rootpath + "\\" + e.Node.FullPath)) { string[] filelist = Directory.GetFiles(rootpath + "\\" + e.Node.FullPath, "*.htm"); nodeTextRect.Width += 4; nodeTextRect.Height -= 4; //画子节点个数 (111) if (e.Node.Text != "" && filelist.Length > 0) { e.Graphics.DrawString(string.Format("({0})", filelist.Length), new Font("Arial", 8), Brushes.Gray, nodeTextRect.Right - 4, nodeTextRect.Top + 2); } } Rectangle r = e.Node.Bounds; r.Height -= 2; ///*测试用,画文字出现的矩形*/ //if (e.Node.Text != "") // e.Graphics.DrawRectangle(new Pen(Color.Blue), r); #endregion #region 4 画IImageList 中的图标=================================================================== int currt_X = e.Node.Bounds.X; if (treeView1.ImageList != null && treeView1.ImageList.Images.Count > 0) { //图标大小16*16 Rectangle imagebox = new Rectangle( e.Node.Bounds.X - 3 - 16, e.Node.Bounds.Y + 3, 16, //IMAGELIST IMAGE WIDTH 16); //HEIGHT int index = e.Node.ImageIndex; string imagekey = e.Node.ImageKey; if (imagekey != "" && treeView1.ImageList.Images.ContainsKey(imagekey)) { e.Graphics.DrawImage(treeView1.ImageList.Images[imagekey], imagebox); } else { if (e.Node.ImageIndex < 0) { index = 0; } else if (index > treeView1.ImageList.Images.Count - 1) { index = 0; } e.Graphics.DrawImage(treeView1.ImageList.Images[index], imagebox); } currt_X -= 19; /*测试 画IMAGELIST的矩形*/ //if (e.Node.ImageIndex > 0) // e.Graphics.DrawRectangle(new Pen(Color.Black, 1), imagebox); } #endregion #region 测试 画所有的边框 //nodeRect = new Rectangle(1, // e.Bounds.Top + 1, // e.Bounds.Width - 3, // e.Bounds.Height - 2); //e.Graphics.DrawRectangle(new Pen(Color.Gray), nodeRect); #endregion //treeView1.EndUpdate(); }
private void OnDrawNode(Object sender, DrawTreeNodeEventArgs e) { e.DrawDefault = false; Rectangle bounds = e.Node.Bounds; Color backHl = PluginBase.MainForm.GetThemeColor("TreeView.Highlight", SystemColors.Highlight); Color foreHl = PluginBase.MainForm.GetThemeColor("TreeView.HighlightText", SystemColors.HighlightText); SolidBrush brushFore = new SolidBrush(e.Node.TreeView.LineColor); SolidBrush brushBack = new SolidBrush(e.Node.TreeView.BackColor); if (bounds.IsEmpty || !e.Node.IsVisible) { return; } if ((e.State & TreeNodeStates.Focused) != 0) { e.Graphics.FillRectangle(new SolidBrush(backHl), Rectangle.Inflate(bounds, 1, 0)); } else if ((e.State & TreeNodeStates.Selected) != 0) { e.Graphics.FillRectangle(new SolidBrush(Color.Gray), Rectangle.Inflate(bounds, 1, 0)); } else { e.Graphics.FillRectangle(brushBack, bounds); } if (e.Node.Nodes.Count > 0) { Point[] arrow; Point middle = new Point(bounds.Left - 28, bounds.Top + bounds.Height / 2); if (e.Node.IsExpanded) { arrow = new Point[] { new Point(middle.X - SIZE3, middle.Y - 1), new Point(middle.X + SIZE3 + 1, middle.Y - 1), new Point(middle.X, middle.Y + SIZE3) }; e.Graphics.FillPolygon(brushFore, arrow); arrow = new Point[] { new Point(middle.X - SIZE1, middle.Y - 1), new Point(middle.X + SIZE1 + 1, middle.Y - 1), new Point(middle.X, middle.Y + SIZE1) }; e.Graphics.FillPolygon(brushBack, arrow); } else { arrow = new Point[] { new Point(middle.X - SIZE2, middle.Y - 2 * SIZE2), new Point(middle.X - SIZE2, middle.Y + 2 * SIZE2), new Point(middle.X + SIZE2, middle.Y) }; e.Graphics.FillPolygon(brushFore, arrow); arrow = new Point[] { new Point(middle.X - SIZE1 - 1, middle.Y - 2 * SIZE1), new Point(middle.X - SIZE1 - 1, middle.Y + 2 * SIZE1), new Point(middle.X + SIZE1 - 1, middle.Y) }; e.Graphics.FillPolygon(brushBack, arrow); } } if (e.Node.ImageIndex != -1) { Point nodePt = new Point(bounds.Location.X - 20, bounds.Location.Y + 1); Image nodeImg = e.Node.TreeView.ImageList.Images[e.Node.ImageIndex]; e.Graphics.DrawImage(nodeImg, nodePt); } Rectangle textRect = bounds; Font nodeFont = e.Node.NodeFont; Color textColor = e.Node.ForeColor; textRect = Rectangle.Inflate(textRect, 2, 0); if (nodeFont == null) { nodeFont = ((TreeView)sender).Font; } if (nodeFont.Bold) { textRect.X += 1; } if ((e.State & TreeNodeStates.Focused) != 0) { textColor = foreHl; } if ((e.State & TreeNodeStates.Selected) != 0) { textColor = foreHl; } if ((e.State & TreeNodeStates.Hot) != 0) { nodeFont = new Font(nodeFont, FontStyle.Underline); } TextRenderer.DrawText(e.Graphics, e.Node.Text, nodeFont, textRect, textColor); }
private void treeView1_DrawNode(object sender, System.Windows.Forms.DrawTreeNodeEventArgs e) { int _offsetX = (e.Node.Level * this.treeView1.Indent); Size _textSize = e.Graphics.MeasureString( e.Node.Text, this.Font).ToSize(); try { if (e.Node.Nodes.Count > 0) { Image _image = this.imageList1.Images[0]; int _offsetY = (int)Math.Ceiling((_textSize.Height - _image.Height) / 2f); e.Graphics.DrawImage(_image, e.Bounds.X + _offsetX, e.Bounds.Y + _offsetY); } } catch { } _offsetX += (int)(this.imageList1.ImageSize.Width * 1.5f); Rectangle _rectangle = new Rectangle( e.Bounds.X + _offsetX, e.Bounds.Y, _textSize.Width, _textSize.Height); if (!((Bookmark)e.Node.Tag).Enabled) { e.Graphics.FillRectangle( new SolidBrush(SystemColors.ControlLightLight), //NOTE: tle bi sicer moralo bit this.BackColor, samo tu ni tu _rectangle); e.Graphics.DrawString( e.Node.Text, this.Font, new SolidBrush(SystemColors.InactiveCaption), e.Bounds.X + _offsetX, e.Bounds.Y); } else if (e.Node.Tag == this.selectedBookmark) { if (this.selectedBookmark != null) { //System.Diagnostics.Debug.WriteLine("*" + this.selectedBookmark.Title); //System.Diagnostics.Debug.WriteLine(((Bookmark)e.Node.Tag).Title); } e.Graphics.FillRectangle( new SolidBrush(SystemColors.MenuHighlight), _rectangle); e.Graphics.DrawString( e.Node.Text, this.Font, new SolidBrush(SystemColors.HighlightText), e.Bounds.X + _offsetX, e.Bounds.Y); } else { e.Graphics.FillRectangle( new SolidBrush(SystemColors.ControlLightLight), //NOTE: tle bi sicer moralo bit this.BackColor, samo tu ni tu _rectangle); e.Graphics.DrawString( e.Node.Text, this.Font, new SolidBrush(this.ForeColor), e.Bounds.X + _offsetX, e.Bounds.Y); } }
protected virtual void OnDrawNode(DrawTreeNodeEventArgs e) { throw null; }
private void DrawNodeDefault(object sender, DrawTreeNodeEventArgs e) { const int TEXT_SELECTION_MARGIN_LEFT = 4; const int TEXT_SELECTION_MARGIN_RIGHT = 4; const int TEXT_SELECTION_HMARGIN = TEXT_SELECTION_MARGIN_LEFT + TEXT_SELECTION_MARGIN_RIGHT; const int TEXT_MARGIN_TOP = 2; const int TEXT_MARGIN_BOTTOM = 2; var node = e.Node; var nodeBounds = node.Bounds; var nodeX = nodeBounds.X; var nodeY = nodeBounds.Y; var nodeWidth = nodeBounds.Width; var nodeContainsArrow = node.Nodes.Count > 0; var nodeContainsImage = node.ImageIndex > -1 && ImageList != null; var graphics = e.Graphics; // Node drawing. graphics.uwfFillRectangle(node.BackColor, nodeBounds.X, nodeY, nodeWidth, nodeBounds.Height); // Draw selection. if (node.IsSelected || node == hoveredNode) { var nodeFillColor = node.IsSelected ? uwfItemSelectedColor : uwfItemHoveredColor; if (node.IsSelected && !Focused) { nodeFillColor = uwfItemSelectedUnfocusedColor; } var selectX = 0; var selectY = nodeY; var selectWidth = Width; var selectHeight = ItemHeight; if (!FullRowSelect) { selectX = nodeX + arrowSize; selectWidth = node.textWidth; if (nodeContainsImage) { selectWidth += nodeBounds.Height - TEXT_SELECTION_MARGIN_LEFT; } else { selectX -= TEXT_SELECTION_MARGIN_LEFT; } } graphics.uwfFillRectangle(nodeFillColor, selectX, selectY, selectWidth, selectHeight); } int xOffset = nodeBounds.X; // Draw collapsed/expanded arrow. if (nodeContainsArrow) { var arrowTexture = (Bitmap)null; if (node.IsExpanded) { if (node.ImageIndex_Expanded > -1 && ImageList != null) { var img = ImageList.Images[node.ImageIndex_Expanded]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeExpanded; } } else { if (node.ImageIndex_Collapsed > -1 && ImageList != null) { var img = ImageList.Images[node.ImageIndex_Collapsed]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeCollapsed; } } if (arrowTexture != null) { var mouseClient = PointToClient(MousePosition); var arrowWidth = arrowSize; var arrowHeight = arrowSize; var arrowX = xOffset; var arrowY = nodeY + nodeBounds.Height / 2f - arrowHeight / 2f; var arrowColor = uwfArrowImageColor; // Check if arrow is hovered. if (nodeBounds.Contains(mouseClient) && mouseClient.X <= arrowX + arrowWidth) { arrowColor = uwfArrowImageHoveredColor; } graphics.uwfDrawImage(arrowTexture, arrowColor, arrowX, arrowY, arrowWidth, arrowHeight); } } xOffset += arrowSize; // Draw image. if (nodeContainsImage) { var image = ImageList.Images[node.ImageIndex]; if (image != null && image.Texture != null) { var imageSize = Math.Min(nodeBounds.Height - 2, image.Height); var imageX = xOffset + (nodeBounds.Height - imageSize) / 2f; var imageY = nodeY + (nodeBounds.Height - imageSize) / 2f; graphics.uwfDrawImage(image, node.ImageColor, imageX, imageY, imageSize, imageSize); xOffset += nodeBounds.Height; } } // Draw text. var nodeText = node.Text; if (nodeText == null && node.Tag != null) { nodeText = node.Tag.ToString(); if (nodeText != node.tagString) { node.textWidth = 0; node.tagString = nodeText; } } if (node.textWidth == 0) { node.textWidth = (int)graphics.MeasureString(nodeText, Font).Width + TEXT_SELECTION_HMARGIN; } var nodeTextX = xOffset; var nodeTextY = nodeY - TEXT_MARGIN_TOP; var nodeTextWidth = node.textWidth; var nodeTextHeight = e.Bounds.Height + TEXT_MARGIN_TOP + TEXT_MARGIN_BOTTOM; var nodeColor = node.ForeColor.IsEmpty ? node.TreeView.ForeColor : node.ForeColor; graphics.uwfDrawString(nodeText, Font, nodeColor, nodeTextX, nodeTextY, nodeTextWidth, nodeTextHeight, ContentAlignment.MiddleLeft); // End of drawing. // TODO: raise when DrawNodeMode is Normal. var drawNode = DrawNode; if (drawNode != null) { drawNode(this, e); } }
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { #region 1 选中的节点背景========================================= Rectangle nodeRect = new Rectangle(1, e.Bounds.Top, e.Bounds.Width - 3, e.Bounds.Height - 1); if (e.Node.IsSelected) { //TreeView有焦点的时候 画选中的节点 if (treeView1.Focused) { e.Graphics.FillRectangle(brush1, nodeRect); e.Graphics.DrawRectangle(pen1, nodeRect); /*测试 画聚焦的边框*/ //ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, Color.Black, SystemColors.Highlight); } /*TreeView失去焦点的时候 */ else { e.Graphics.FillRectangle(brush2, nodeRect); e.Graphics.DrawRectangle(pen2, nodeRect); } } else if ((e.State & TreeNodeStates.Hot) != 0 && e.Node.Text != "")//|| currentMouseMoveNode == e.Node) { e.Graphics.FillRectangle(brush3, nodeRect); e.Graphics.DrawRectangle(pen3, nodeRect); } else { e.Graphics.FillRectangle(Brushes.White, e.Bounds); } #endregion #region 2 +-号绘制========================================= Rectangle plusRect = new Rectangle(e.Node.Bounds.Left - 32, nodeRect.Top + 7, 9, 9); // +-号的大小 是9 * 9 if (e.Node.IsExpanded) { e.Graphics.DrawImage(arrowImageList.Images[1], plusRect); } else if (e.Node.IsExpanded == false && e.Node.Nodes.Count > 0) { e.Graphics.DrawImage(arrowImageList.Images[0], plusRect); } /*测试用 画出+-号出现的矩形*/ //if (e.Node.Nodes.Count > 0) // e.Graphics.DrawRectangle(new Pen(Color.Red), plusRect); #endregion #region 3 画节点文本========================================= Rectangle nodeTextRect = new Rectangle( e.Node.Bounds.Left, e.Node.Bounds.Top + 2, e.Node.Bounds.Width + 2, e.Node.Bounds.Height ); nodeTextRect.Width += 4; nodeTextRect.Height -= 4; e.Graphics.DrawString(e.Node.Text, e.Node.TreeView.Font, new SolidBrush(Color.Black), nodeTextRect); //画子节点个数 (111) if (e.Node.GetNodeCount(true) > 0) { e.Graphics.DrawString(string.Format("({0})", e.Node.GetNodeCount(true)), new Font("Arial", 8), Brushes.Gray, nodeTextRect.Right - 4, nodeTextRect.Top + 2); } ///*测试用,画文字出现的矩形*/ //if (e.Node.Text != "") // e.Graphics.DrawRectangle(new Pen(Color.Blue), nodeTextRect); #endregion #region 4 画IImageList 中的图标=================================================================== int currt_X = e.Node.Bounds.X; if (treeView1.ImageList != null && treeView1.ImageList.Images.Count > 0) { //图标大小16*16 Rectangle imagebox = new Rectangle( e.Node.Bounds.X - 3 - 16, e.Node.Bounds.Y + 3, 16, //IMAGELIST IMAGE WIDTH 16); //HEIGHT int index = e.Node.ImageIndex; string imagekey = e.Node.ImageKey; if (imagekey != "" && treeView1.ImageList.Images.ContainsKey(imagekey)) { e.Graphics.DrawImage(treeView1.ImageList.Images[imagekey], imagebox); } else { if (e.Node.ImageIndex < 0) { index = 0; } else if (index > treeView1.ImageList.Images.Count - 1) { index = 0; } e.Graphics.DrawImage(treeView1.ImageList.Images[index], imagebox); } currt_X -= 19; /*测试 画IMAGELIST的矩形*/ //if (e.Node.ImageIndex > 0) // e.Graphics.DrawRectangle(new Pen(Color.Black, 1), imagebox); } #endregion ///*测试 画所有的边框*/ //nodeRect = new Rectangle(1, // e.Bounds.Top + 1, // e.Bounds.Width - 3, // e.Bounds.Height - 2); //e.Graphics.DrawRectangle(new Pen(Color.Gray), nodeRect); }
private void DrawNodeDefault(object sender, DrawTreeNodeEventArgs e) { var node = e.Node; var nodeBounds = node.Bounds; var nodeY = nodeBounds.Y; var graphics = e.Graphics; // Node drawing. graphics.uwfFillRectangle(node.BackColor, nodeBounds.X, nodeY, nodeBounds.Width, nodeBounds.Height); if (node.IsSelected || node == hoveredNode) { var nodeFillColor = node.IsSelected ? uwfSelectionColor : uwfSelectionHoverColor; if (node.IsSelected && Focused == false) { nodeFillColor = uwfSelectionUnfocusedColor; } graphics.uwfFillRectangle(nodeFillColor, uwfUseNodeBoundsForSelection ? nodeBounds.X : 0, nodeY, Width, ItemHeight); } int xOffset = nodeBounds.X; // Draw collapsed/expanded arrow. if (node.Nodes.Count > 0) { Bitmap arrowTexture = null; if (node.IsExpanded) { if (node.ImageIndex_Expanded > -1 && imageList != null) { var img = ImageList.Images[node.ImageIndex_Expanded]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeExpanded; } } else { if (node.ImageIndex_Collapsed > -1 && imageList != null) { var img = ImageList.Images[node.ImageIndex_Collapsed]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeCollapsed; } } if (arrowTexture != null) { var arrowWidth = arrowSize; var arrowHeight = arrowSize; graphics.DrawImage(arrowTexture, xOffset, nodeY + nodeBounds.Height / 2f - arrowHeight / 2f, arrowWidth, arrowHeight); } } xOffset += arrowSize; // Draw image. if (node.ImageIndex > -1 && imageList != null) { var image = imageList.Images[node.ImageIndex]; if (image != null && image.uTexture != null) { var imageSize = nodeBounds.Height - 2; if (image.Height < imageSize) { imageSize = image.Height; } graphics.uwfDrawImage(image, node.ImageColor, xOffset + (nodeBounds.Height - imageSize) / 2f, nodeY + (nodeBounds.Height - imageSize) / 2f, imageSize, imageSize); xOffset += nodeBounds.Height; } } // Draw text. string stringToDraw = node.Text; if (stringToDraw == null && node.Tag != null) { stringToDraw = node.Tag.ToString(); } graphics.uwfDrawString(stringToDraw, Font, node.ForeColor, xOffset, nodeY - 2, (uwfWrapText ? Width : Width * 16), e.Bounds.Height + 4, ContentAlignment.MiddleLeft); // End of drawing. // TODO: raise when DrawNodeMode is Normal. var drawNode = DrawNode; if (drawNode != null) { drawNode(this, e); } }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { //base.OnDrawNode(e); DrawNodeItem(e); //CustomDrawNode(e); }
protected override void OnDrawNode(DrawTreeNodeEventArgs e) { var selectionBounds = new Rectangle(e.Node.Bounds.X, e.Node.Bounds.Y, 660, e.Node.Bounds.Height); if (e.Node.IsSelected || e.Node == hoveredNode) { var backColor = Color.FromArgb(209, 232, 255); if (e.Node.IsSelected) { if (Focused) { selectionPen.Color = Color.FromArgb(60, 162, 223); } else { backColor = Color.FromArgb(247, 247, 247); selectionPen.Color = Color.FromArgb(222, 222, 222); } } else { // Hovered. backColor = Color.FromArgb(229, 243, 251); selectionPen.Color = Color.FromArgb(112, 192, 231); } e.Graphics.uwfFillRectangle(backColor, selectionBounds); e.Graphics.DrawRectangle(selectionPen, selectionBounds); } base.OnDrawNode(e); #if IO_SUPPORTED var info = e.Node.Tag as FileInfo; if (info == null) { return; } var fInfo = info.Info; if (fInfo == null) { return; } var foreColor = e.Node.ForeColor; if (foreColor.IsEmpty) { foreColor = ForeColor; } e.Graphics.uwfDrawString( fInfo.LastWriteTime.ToString("dd.MM.yyyy HH:mm"), Font, foreColor, selectionBounds.X + 440, selectionBounds.Y, 200, selectionBounds.Height); e.Graphics.uwfDrawString( info.sizeStr, Font, foreColor, selectionBounds.X + 400, selectionBounds.Y, selectionBounds.Width - 412, selectionBounds.Height, ContentAlignment.MiddleRight); #endif }
private void CustomDrawNode(DrawTreeNodeEventArgs e) { const int int_CheckBoxWidth = 14; const int int_RowWidth = 9; const int int_ExpandeboxWidth = 15; //if (this.CheckBoxes) //{ TreeNode node = e.Node; int currt_X = node.Bounds.X; Pen penText = new Pen(Color.Red, 1); Pen penDotline = new Pen(Color.Gray, 1); //文字部分 Font font = new Font("SimSun", 12F, GraphicsUnit.Pixel); Brush brush = new SolidBrush(node.TreeView.BackColor); byte[] sarr = System.Text.Encoding.Default.GetBytes(node.Text); int textlength = sarr.Length; Rectangle rcText = new Rectangle(node.Bounds.Left + 2, e.Bounds.Top + 2, textlength * 6 + 5, e.Bounds.Height - 3); if (e.Node.TreeView.SelectedNode == node) { if (e.State == TreeNodeStates.Selected) { brush = new SolidBrush(Color.FromArgb(236, 233, 216)); e.Graphics.FillRectangle(brush, new Rectangle(rcText.Location, new Size(textlength * 6 + 5, rcText.Height))); TextRenderer.DrawText(e.Graphics, node.Text, font, rcText, Color.Red, Color.Transparent, TextFormatFlags.Left); } else { brush = new SolidBrush(Color.FromArgb(10, 36, 106)); e.Graphics.FillRectangle(brush, new Rectangle(rcText.Location, new Size(textlength * 6 + 5, rcText.Height))); Pen penDotline2 = new Pen(Color.Black, 1); penDotline2.DashStyle = DashStyle.Dot; e.Graphics.DrawRectangle(penDotline2, new Rectangle(node.Bounds.Left + 1, e.Bounds.Top + 1, textlength * 6 + 6, e.Bounds.Height - 2)); TextRenderer.DrawText(e.Graphics, node.Text, font, rcText, Color.White, Color.Transparent, TextFormatFlags.Left); } } else { TextRenderer.DrawText(e.Graphics, node.Text, font, rcText, Color.Red, Color.Transparent, TextFormatFlags.Left); } //画image if (this.ImageList != null && this.ImageList.Images.Count != 0) { //画image Rectangle imagebox = new Rectangle(currt_X - 3 - 16, node.Bounds.Y + 1, 16, 14); int index = node.ImageIndex; string imagekey = node.ImageKey; if (imagekey != "" && this.ImageList.Images.ContainsKey(imagekey)) { e.Graphics.DrawImage(this.ImageList.Images[imagekey], imagebox); } else { if (index < 0) { index = 0; } else if (index > this.ImageList.Images.Count - 1) { index = 0; } e.Graphics.DrawImage(this.ImageList.Images[index], imagebox); } e.Graphics.DrawRectangle(new Pen(Color.Black, 1), imagebox); currt_X -= 19; } //画checkbox if (this.CheckBoxes) { Rectangle rcCheck = new Rectangle(node.Bounds.X - int_CheckBoxWidth, node.Bounds.Y, int_CheckBoxWidth, int_CheckBoxWidth); using (Bitmap bmp = new Bitmap(node.Checked ?Properties.Resources.check : Properties.Resources.expan1)) { e.Graphics.DrawImage(bmp, rcCheck); //DrawUtil.DrawBitmapWithTransparent(e.Graphics, bmp, rcCheck, 0, bmp.Height / 4, bmp.Width, bmp.Height / 4, Color.Magenta, true); } currt_X = currt_X - int_CheckBoxWidth - 3; } //画线 if (node.TreeView.ShowLines) { penDotline.DashStyle = DashStyle.Dot; e.Graphics.DrawLine(penDotline, currt_X, node.Bounds.Top + node.Bounds.Height / 2 + 1, currt_X - int_RowWidth, node.Bounds.Top + node.Bounds.Height / 2 + 1); if (node.NextNode != null) { if (node.TreeView.Nodes[0] == node) { e.Graphics.DrawLine(penDotline, currt_X - 9, node.Bounds.Bottom, currt_X - 9, node.Bounds.Bottom - node.Bounds.Height / 2 - 1); } else { e.Graphics.DrawLine(penDotline, currt_X - 9, node.Bounds.Top, currt_X - 9, node.Bounds.Bottom); } } else if (node.TreeView.Nodes[0] == node) { } else { e.Graphics.DrawLine(penDotline, currt_X - 9, node.Bounds.Top, currt_X - 9, node.Bounds.Top + node.Bounds.Height / 2 + 2); } int level = node.Level; TreeNode parentnode = new TreeNode(); if (level != 0) { parentnode = node.Parent; while (level > 0) { if (parentnode.NextNode != null) { e.Graphics.DrawLine(penDotline, parentnode.Bounds.X - (node.Bounds.X - currt_X + 9), parentnode.Bounds.Bottom, parentnode.Bounds.X - (node.Bounds.X - currt_X + 9), parentnode.NextNode.Bounds.Top); } parentnode = parentnode.Parent; level--; } } currt_X = currt_X - 9; } //画+ -框 if (e.Node.Nodes.Count > 0) { Rectangle rcExpandebox = new Rectangle(currt_X - int_ExpandeboxWidth / 2, node.Bounds.Y + int_ExpandeboxWidth / 2, int_ExpandeboxWidth, int_ExpandeboxWidth); //e.Graphics.FillRectangle(new SolidBrush(node.TreeView.BackColor), new Rectangle(rcExpandebox.X, rcExpandebox.Y, 9, 9)); //penDotline.DashStyle = DashStyle.Solid; //e.Graphics.DrawRectangle(penDotline, rcExpandebox); //e.Graphics.DrawLine(penText, rcExpandebox.Left + 2, rcExpandebox.Top + 4, rcExpandebox.Right - 2, rcExpandebox.Top + 4); //if (!node.IsExpanded) //{ // e.Graphics.DrawLine(penText, rcExpandebox.Left + 4, rcExpandebox.Top + 2, rcExpandebox.Left + 4, rcExpandebox.Top + 6); //} if (!node.IsExpanded) { e.Graphics.DrawImage(Properties.Resources.unexpan, rcExpandebox); } else { e.Graphics.DrawImage(Properties.Resources.expan, rcExpandebox); } } //} //else { e.DrawDefault = true; } }
private void _OnDrawNode(object sender, DrawTreeNodeEventArgs e) { var node = e.Node; var nodeY = node.Bounds.Y - scrollIndex; // TODO: to node.Bounds.Y // Node drawing. e.Graphics.FillRectangle(node.BackColor, node.Bounds.X, nodeY, node.Bounds.Width, node.Bounds.Height); if (node.IsSelected || node == _hoveredNode) { e.Graphics.FillRectangle((node.IsSelected ? SelectionColor : SelectionHoverColor), UseNodeBoundsForSelection ? node.Bounds.X : 0, nodeY, Width, ItemHeight); } int xOffset = node.Bounds.X; // Draw collapsed/expanded arrow. if (node.Nodes.Count > 0) { UnityEngine.Texture2D arrowTexture = null; if (node.IsExpanded) { if (node.ImageIndex_Expanded > -1) { var img = ImageList.Images[node.ImageIndex_Expanded]; if (img != null) { arrowTexture = img.uTexture; } } else { arrowTexture = ApplicationBehaviour.Resources.Images.TreeNodeExpanded; } } else { if (node.ImageIndex_Collapsed > -1) { var img = ImageList.Images[node.ImageIndex_Collapsed]; if (img != null) { arrowTexture = img.uTexture; } } else { arrowTexture = ApplicationBehaviour.Resources.Images.TreeNodeCollapsed; } } if (arrowTexture != null) { e.Graphics.DrawTexture(arrowTexture, xOffset, nodeY + node.Bounds.Height / 2 - arrowTexture.height / 2, arrowTexture.width, arrowTexture.height); xOffset += arrowTexture.width; } } // Draw image. if (node.ImageIndex > -1) { var image = ImageList.Images[node.ImageIndex]; if (image != null && image.uTexture != null) { e.Graphics.DrawTexture(image.uTexture, xOffset, nodeY + node.Bounds.Height / 2 - image.Height / 2, image.Width, image.Height, node.ImageColor); xOffset += image.Width + 2; } } // Draw text. string stringToDraw = node.Text; if (stringToDraw == null && node.Tag != null) { stringToDraw = node.Tag.ToString(); } e.Graphics.DrawString(stringToDraw, Font, node.ForeColor, xOffset, nodeY - 2, (WrapText ? Width : Width * 16), e.Bounds.Height + 4, ContentAlignment.MiddleLeft); // End of drawing. DrawNode(this, e); }
private void _OnDrawNode(object sender, DrawTreeNodeEventArgs e) { var node = e.Node; var nodeBounds = node.Bounds; var nodeY = nodeBounds.Y - ScrollIndex; // TODO: to node.Bounds.Y var graphics = e.Graphics; // Node drawing. graphics.uwfFillRectangle(node.BackColor, nodeBounds.X, nodeY, nodeBounds.Width, nodeBounds.Height); if (node.IsSelected || node == hoveredNode) { graphics.uwfFillRectangle((node.IsSelected ? SelectionColor : SelectionHoverColor), UseNodeBoundsForSelection ? nodeBounds.X : 0, nodeY, Width, ItemHeight); } int xOffset = nodeBounds.X; // Draw collapsed/expanded arrow. if (node.Nodes.Count > 0) { Bitmap arrowTexture = null; if (node.IsExpanded) { if (node.ImageIndex_Expanded > -1) { var img = ImageList.Images[node.ImageIndex_Expanded]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeExpanded; } } else { if (node.ImageIndex_Collapsed > -1) { var img = ImageList.Images[node.ImageIndex_Collapsed]; if (img != null) { arrowTexture = img as Bitmap; } } else { arrowTexture = uwfAppOwner.Resources.TreeNodeCollapsed; } } if (arrowTexture != null) { var arrowWidth = arrowSize; var arrowHeight = arrowSize; graphics.DrawImage(arrowTexture, xOffset, nodeY + nodeBounds.Height / 2f - arrowHeight / 2f, arrowWidth, arrowHeight); } } xOffset += arrowSize; // Draw image. if (node.ImageIndex > -1) { var image = ImageList.Images[node.ImageIndex]; if (image != null && image.uTexture != null) { graphics.uwfDrawImage(image, node.ImageColor, xOffset, nodeY + nodeBounds.Height / 2f - image.Height / 2f, image.Width, image.Height); xOffset += image.Width + 2; } } // Draw text. string stringToDraw = node.Text; if (stringToDraw == null && node.Tag != null) { stringToDraw = node.Tag.ToString(); } graphics.uwfDrawString(stringToDraw, Font, node.ForeColor, xOffset, nodeY - 2, (WrapText ? Width : Width * 16), e.Bounds.Height + 4, ContentAlignment.MiddleLeft); // End of drawing. var drawNode = DrawNode; if (drawNode != null) { drawNode(this, e); } }
/// <summary> /// 自定义绘制节点 /// </summary> /// <param name="e"></param> private void DrawNodeItem(DrawTreeNodeEventArgs e) { TreeNode tn = e.Node; if (tn.Level == 0) { using (Graphics g = e.Graphics) { //绘制分组的背景 RenderBackgroundInternalRate(g, e.Bounds, GroupBgColor, GroupBgColor, Color.FromArgb(200, 255, 255, 255), 0.45f, true, 300); //绘制展开按扭 g.FillEllipse(new SolidBrush(ExpandButtonColor), ExpandButtonBounds(e.Bounds)); g.DrawEllipse(new Pen(Color.LightGray), ExpandButtonBounds(e.Bounds)); Point p1; Point p2; Point p3; if (tn.IsExpanded) { p1 = new Point(ExpandButtonBounds(e.Bounds).X + 3, ExpandButtonBounds(e.Bounds).Bottom - 4); p2 = new Point(ExpandButtonBounds(e.Bounds).X + (ExpandButtonSize.Width) / 2, ExpandButtonBounds(e.Bounds).Top + 5); p3 = new Point(ExpandButtonBounds(e.Bounds).Right - 3, ExpandButtonBounds(e.Bounds).Bottom - 4); } else { p1 = new Point(ExpandButtonBounds(e.Bounds).X + 3, ExpandButtonBounds(e.Bounds).Y + 4); p2 = new Point(ExpandButtonBounds(e.Bounds).X + (ExpandButtonSize.Width) / 2, ExpandButtonBounds(e.Bounds).Bottom - 5); p3 = new Point(ExpandButtonBounds(e.Bounds).Right - 3, ExpandButtonBounds(e.Bounds).Y + 4); } GraphicsPath gp = new GraphicsPath(); gp.AddLine(p1, p2); gp.AddLine(p2, p3); g.DrawPath(new Pen(Color.FromArgb(255, 150, 0, 0), 2f), gp); //绘制分组的文本 TextRenderer.DrawText(g, e.Node.Text, this.Font, GroupTitleBounds(e.Bounds), this.GroupTitleColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); } } else if (tn.Level == 1) { //e.DrawDefault = true; using (Graphics g = e.Graphics) { if (tn.IsSelected) { TextRenderer.DrawText(g, e.Node.Text, new Font(this.Font.FontFamily.Name, this.Font.Size, FontStyle.Underline), e.Bounds, OverForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } else { TextRenderer.DrawText(g, e.Node.Text, this.Font, e.Bounds, this.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } } } }