Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > TreeView: selected node fore color


Автор: lexem78 30.6.2011, 21:25
Здрасте.
Во время добавления сабнодов, текст некоторых из них должен быть серым (вместо черного), чтоб показать что они якобы disabled.
Но почему-то при выделении текст всё равно становится чёрным и весь эффект пропадает. Как сделать чтоб цвет остался серым?

Автор: lexem78 1.7.2011, 14:40
    Сам нашёл. Но если кому-то интересно,  то вот пример как это сделать:

     private void InitTreeView()
     {    
           TreeNode node;

            for (int x = 1; x < 4; ++x)
            {
                // Add a root node to the TreeView control.
                node = myTreeView.Nodes.Add(String.Format("Node {0}", x));
                for (int y = 1; y < 4; ++y)
                {
                    TreeNode subnode = new TreeNode(String.Format("Subnode {0}", y));                   
                    node.Nodes.Add(subnode);
                }
            }
            myTreeView.ExpandAll();
            myTreeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
            myTreeView.DrawNode += new DrawTreeNodeEventHandler(myTreeView_DrawNode);

     }

        private void myTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            // Draw the background and node text for a selected node.
            if ((e.State & TreeNodeStates.Selected) != 0)
            {               
                // 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.Gray,  Rectangle.Inflate(e.Bounds, 0, 0));
                }
                else
                {
                    // Draw the node text.
                    e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.Black,  Rectangle.Inflate(e.Bounds, 0, 0));
                }
            }
            // Use the default background and node text.
            else
            {
                e.DrawDefault = true;
            }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)