TreeView.DrawNode Event 官方指南
来源:互联网 发布:象棋软件下载 编辑:程序博客网 时间:2024/06/07 05:36
https://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.drawnode.aspx
using System;using System.Drawing;using System.Windows.Forms;public class TreeViewOwnerDraw : Form{ private TreeView myTreeView; // Create a Font object for the node tags. Font tagFont = new Font("Helvetica", 8, FontStyle.Bold); public TreeViewOwnerDraw() { // Create and initialize the TreeView control. myTreeView = new TreeView(); myTreeView.Dock = DockStyle.Fill; myTreeView.BackColor = Color.Tan; myTreeView.CheckBoxes = true; // Add nodes to the TreeView control. TreeNode node; for (int x = 1; x < 4; ++x) { // Add a root node to the TreeView control. node = myTreeView.Nodes.Add(String.Format("Task {0}", x)); for (int y = 1; y < 4; ++y) { // Add a child node to the root node. node.Nodes.Add(String.Format("Subtask {0}", y)); } } myTreeView.ExpandAll(); // Add tags containing alert messages to a few nodes // and set the node background color to highlight them. myTreeView.Nodes[1].Nodes[0].Tag = "urgent!"; myTreeView.Nodes[1].Nodes[0].BackColor = Color.Yellow; myTreeView.SelectedNode = myTreeView.Nodes[1].Nodes[0]; myTreeView.Nodes[2].Nodes[1].Tag = "urgent!"; myTreeView.Nodes[2].Nodes[1].BackColor = Color.Yellow; // Configure the TreeView control for owner-draw and add // a handler for the DrawNode event. myTreeView.DrawMode = TreeViewDrawMode.OwnerDrawText; myTreeView.DrawNode += new DrawTreeNodeEventHandler(myTreeView_DrawNode); // Add a handler for the MouseDown event so that a node can be // selected by clicking the tag text as well as the node text. myTreeView.MouseDown += new MouseEventHandler(myTreeView_MouseDown); // Initialize the form and add the TreeView control to it. this.ClientSize = new Size(292, 273); this.Controls.Add(myTreeView); } // Clean up any resources being used. protected override void Dispose(bool disposing) { if (disposing) { tagFont.Dispose(); } base.Dispose(disposing); } [STAThreadAttribute()] static void Main() { Application.Run(new TreeViewOwnerDraw()); } // Draws a node. private void myTreeView_DrawNode( object sender, DrawTreeNodeEventArgs e) { // 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. e.Graphics.FillRectangle(Brushes.Green, NodeBounds(e.Node)); // 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, 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.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); } } } // Selects a node that is clicked on its label or tag text. private void myTreeView_MouseDown(object sender, MouseEventArgs e) { TreeNode clickedNode = myTreeView.GetNodeAt(e.X, e.Y); if (NodeBounds(clickedNode).Contains(e.X, e.Y)) { myTreeView.SelectedNode = clickedNode; } } // Returns the bounds of the specified node, including the region // occupied by the node label and any node tag displayed. private Rectangle NodeBounds(TreeNode node) { // Set the return value to the normal node bounds. Rectangle bounds = node.Bounds; if (node.Tag != null) { // Retrieve a Graphics object from the TreeView handle // and use it to calculate the display width of the tag. Graphics g = myTreeView.CreateGraphics(); int tagWidth = (int)g.MeasureString (node.Tag.ToString(), tagFont).Width + 6; // Adjust the node bounds using the calculated value. bounds.Offset(tagWidth/2, 0); bounds = Rectangle.Inflate(bounds, tagWidth/2, 0); g.Dispose(); } return bounds; }}
0 0
- TreeView.DrawNode Event 官方指南
- TreeView::DrawNode Event
- DrawNode
- DrawNode遮罩
- cc.DrawNode
- 官方 Windows UX 指南
- Microsoft 官方安全指南
- BackTrack4 官方指南
- ubuntu官方指南
- 官方Blazeds开发指南
- dracMail 官方配置指南
- 官方:git - 简易指南
- Restlet官方指南
- CyanogenMod 官方移植指南
- 自定义照相机官方指南
- Maven官方指南
- Material Drawer 官方指南
- RabbitMQ官方指南翻译
- RecyclerView通用adapter以及item点击事件的实现
- 设计模式之工厂模式
- xUtils2和xUtils3的使用及区别
- linux 远程 windows
- hibernate中设置inverse属性对多对多关联关系的影响
- TreeView.DrawNode Event 官方指南
- 从源代码分析Android-Universal-Image-Loader的缓存处理机制
- lightOj 1248 Dice (III) 概率公式
- libevent之Reactor模式详解
- 每日一练——用两个栈实现队列&用两个队列实现栈
- |Tyvj|P1001 第K极值
- 替换换行符
- Ubuntu操作系统综合贴
- 设计模式六大原则: 一个萝卜一个坑 -- 单一职责原则