Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Linq;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace WindowsFormsApp4
- {
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- public class TreeViewOwnerDraw : Form
- {
- private FakeTree myTreeView;
- private TreeView tester;
- private Button testeeee;
- private TreeNode select;
- private Button button1;
- // 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 FakeTree();
- myTreeView.Dock = DockStyle.Left;
- myTreeView.BackColor = Color.Tan;
- myTreeView.CheckBoxes = true;
- myTreeView.Size = new System.Drawing.Size(75, 200);
- // 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.
- TreeNode t = node.Nodes.Add(String.Format("Subtask {0}", y));
- t.ToolTipText = "help";
- for (int i = 1; i < 4; ++i)
- {
- // Add a child node to the root node.
- t.Nodes.Add(String.Format("sSubtask {0}", i));
- }
- }
- }
- 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);
- myTreeView.NodeMouseHover += new TreeNodeMouseHoverEventHandler(NodeMousHover);
- myTreeView.Size = new Size(500, 500);
- button1 = new Button();
- button1.Size = new Size(100, 100);
- button1.Location = new Point(700, 700);
- button1.Click += button1_Click;
- // Initialize the form and add the TreeView control to it.
- this.ClientSize = new Size(1000, 1000);
- this.Controls.Add(myTreeView);
- this.Controls.Add(button1);
- }
- // Clean up any resources being used.
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- tagFont.Dispose();
- }
- base.Dispose(disposing);
- }
- [STAThreadAttribute()]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- //Application.Run(new Form1());
- Application.Run(new TreeViewOwnerDraw());
- }
- // Draws a node.
- private void myTreeView_DrawNode(
- object sender, DrawTreeNodeEventArgs e)
- {
- Console.WriteLine(e.Node.Text + " Rewritten");
- // Draw the background and node text for a selected node.
- // 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.
- // Draw the node text.
- if (e.Node == select)
- {
- e.Graphics.FillRectangle(new SolidBrush(Color.Red), e.Bounds);
- TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds,
- Color.Black, Color.Empty,
- TextFormatFlags.VerticalCenter);
- }
- else
- {
- e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.Bounds);
- TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds,
- Color.White, Color.Empty,
- TextFormatFlags.VerticalCenter);
- }
- }
- //Selects a node that is clicked on its label or tag text.
- private void myTreeView_MouseDown(object sender, MouseEventArgs e)
- {
- Console.WriteLine("Clicked");
- TreeNode clickedNode = myTreeView.GetNodeAt(e.X, e.Y);
- select = clickedNode;
- myTreeView.SelectedNode = clickedNode;
- }
- private void NodeMousHover(object sender, TreeNodeMouseHoverEventArgs e)
- {
- Console.WriteLine("hover");
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Console.WriteLine("Break");
- }
- }
- }
- public class FakeTree : TreeView
- {
- private const int WM_ERASEBKGND = 0x0014;
- // Pinvoke:
- private const int TVM_SETEXTENDEDSTYLE = 0x1100 + 44;
- private const int TVM_GETEXTENDEDSTYLE = 0x1100 + 45;
- private const int TVS_EX_DOUBLEBUFFER = 0x0004;
- protected override void WndProc(ref Message msg)
- {
- if (msg.Msg == WM_ERASEBKGND)
- {
- return;
- }
- base.WndProc(ref msg);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement