Advertisement
Guest User

Untitled

a guest
Aug 17th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms;
  7.  
  8.  
  9.  
  10. namespace WindowsFormsApp4
  11. {
  12.     using System;
  13.     using System.Drawing;
  14.     using System.Windows.Forms;
  15.  
  16.     public class TreeViewOwnerDraw : Form
  17.     {
  18.         private FakeTree myTreeView;
  19.         private TreeView tester;
  20.         private Button testeeee;
  21.         private TreeNode select;
  22.         private Button button1;
  23.         // Create a Font object for the node tags.
  24.         Font tagFont = new Font("Helvetica", 8, FontStyle.Bold);
  25.  
  26.         public TreeViewOwnerDraw()
  27.         {
  28.             // Create and initialize the TreeView control.
  29.             myTreeView = new FakeTree();
  30.             myTreeView.Dock = DockStyle.Left;
  31.             myTreeView.BackColor = Color.Tan;
  32.             myTreeView.CheckBoxes = true;
  33.             myTreeView.Size = new System.Drawing.Size(75, 200);
  34.  
  35.             // Add nodes to the TreeView control.
  36.             TreeNode node;
  37.             for (int x = 1; x < 4; ++x)
  38.             {
  39.                 // Add a root node to the TreeView control.
  40.                 node = myTreeView.Nodes.Add(String.Format("Task {0}", x));
  41.                 for (int y = 1; y < 4; ++y)
  42.                 {
  43.                     // Add a child node to the root node.
  44.                      TreeNode t = node.Nodes.Add(String.Format("Subtask {0}", y));
  45.                     t.ToolTipText = "help";
  46.                     for (int i = 1; i < 4; ++i)
  47.                     {
  48.                         // Add a child node to the root node.
  49.                          t.Nodes.Add(String.Format("sSubtask {0}", i));
  50.  
  51.                     }
  52.                 }
  53.             }
  54.             myTreeView.ExpandAll();
  55.  
  56.             // Add tags containing alert messages to a few nodes
  57.             // and set the node background color to highlight them.
  58.             myTreeView.Nodes[1].Nodes[0].Tag = "urgent!";
  59.             myTreeView.Nodes[1].Nodes[0].BackColor = Color.Yellow;
  60.             myTreeView.SelectedNode = myTreeView.Nodes[1].Nodes[0];
  61.             myTreeView.Nodes[2].Nodes[1].Tag = "urgent!";
  62.             myTreeView.Nodes[2].Nodes[1].BackColor = Color.Yellow;
  63.  
  64.             // Configure the TreeView control for owner-draw and add
  65.             // a handler for the DrawNode event.
  66.             myTreeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
  67.             myTreeView.DrawNode +=
  68.                 new DrawTreeNodeEventHandler(myTreeView_DrawNode);
  69.  
  70.             // Add a handler for the MouseDown event so that a node can be
  71.             // selected by clicking the tag text as well as the node text.
  72.             myTreeView.MouseDown += new MouseEventHandler(myTreeView_MouseDown);
  73.             myTreeView.NodeMouseHover += new TreeNodeMouseHoverEventHandler(NodeMousHover);
  74.             myTreeView.Size = new Size(500, 500);
  75.             button1 = new Button();
  76.             button1.Size = new Size(100, 100);
  77.             button1.Location = new Point(700, 700);
  78.             button1.Click += button1_Click;
  79.             // Initialize the form and add the TreeView control to it.
  80.             this.ClientSize = new Size(1000, 1000);
  81.             this.Controls.Add(myTreeView);
  82.             this.Controls.Add(button1);
  83.         }
  84.  
  85.         // Clean up any resources being used.        
  86.         protected override void Dispose(bool disposing)
  87.         {
  88.             if (disposing)
  89.             {
  90.                 tagFont.Dispose();
  91.             }
  92.             base.Dispose(disposing);
  93.         }
  94.  
  95.         [STAThreadAttribute()]
  96.         static void Main()
  97.         {
  98.             Application.EnableVisualStyles();
  99.             Application.SetCompatibleTextRenderingDefault(false);
  100.             //Application.Run(new Form1());
  101.             Application.Run(new TreeViewOwnerDraw());
  102.         }
  103.  
  104.         // Draws a node.
  105.         private void myTreeView_DrawNode(
  106.             object sender, DrawTreeNodeEventArgs e)
  107.         {
  108.             Console.WriteLine(e.Node.Text + " Rewritten");
  109.             // Draw the background and node text for a selected node.
  110.  
  111.                 // Draw the background of the selected node. The NodeBounds
  112.                 // method makes the highlight rectangle large enough to
  113.                 // include the text of a node tag, if one is present.
  114.                
  115.  
  116.  
  117.  
  118.             // Draw the node text.
  119.             if (e.Node == select)
  120.             {
  121.                 e.Graphics.FillRectangle(new SolidBrush(Color.Red), e.Bounds);
  122.                 TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds,
  123.                           Color.Black, Color.Empty,
  124.                           TextFormatFlags.VerticalCenter);
  125.             }
  126.             else
  127.             {
  128.                 e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.Bounds);
  129.                 TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds,
  130.                           Color.White, Color.Empty,
  131.                           TextFormatFlags.VerticalCenter);
  132.             }
  133.         }
  134.  
  135.         //Selects a node that is clicked on its label or tag text.
  136.         private void myTreeView_MouseDown(object sender, MouseEventArgs e)
  137.         {
  138.             Console.WriteLine("Clicked");
  139.             TreeNode clickedNode = myTreeView.GetNodeAt(e.X, e.Y);
  140.  
  141.             select = clickedNode;    
  142.                 myTreeView.SelectedNode = clickedNode;
  143.            
  144.         }
  145.  
  146.         private void  NodeMousHover(object sender, TreeNodeMouseHoverEventArgs e)
  147.         {
  148.             Console.WriteLine("hover");
  149.         }
  150.      
  151.         private void button1_Click(object sender, EventArgs e)
  152.         {
  153.             Console.WriteLine("Break");            
  154.         }
  155.  
  156.     }
  157. }
  158. public class FakeTree : TreeView
  159.      {
  160.     private const int WM_ERASEBKGND = 0x0014;
  161.    
  162.  
  163.     // Pinvoke:
  164.     private const int TVM_SETEXTENDEDSTYLE = 0x1100 + 44;
  165.     private const int TVM_GETEXTENDEDSTYLE = 0x1100 + 45;
  166.     private const int TVS_EX_DOUBLEBUFFER = 0x0004;
  167.     protected override void WndProc(ref Message msg)
  168.     {
  169.         if (msg.Msg == WM_ERASEBKGND)
  170.         {
  171.             return;
  172.         }
  173.         base.WndProc(ref msg);
  174.        
  175.        
  176.     }
  177.  
  178. }
  179.  
  180.  
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement