Gauri Bharde Ответов: 3

установите различные цвета с различными уровнями в treeview


У меня есть treeview, этот treeview загружен программно.это 3-уровневый treeview

Отдел
|
- Подразделение
|
_КПЭ

на самом деле я хочу установить разные шрифты и разные цвета для каждого уровня узла.
Отдел имеет разные шрифты по сравнению с подотделом и КПЭ,
Субдепартамент имеет разные шрифты по сравнению с отделом и КПЭ,
KPI имеют разные шрифты по сравнению с отделом и подотделом
так что же делать?
на самом деле я попробовал это сделать, но шрифт и цвет установлены только для выбранного узла.

Mycode:

treeViewKPI.SelectedNode.NodeFont = новый шрифт("Arial",10);
treeViewKPI.Выбранный узел.ForeColor =Система.Рисование.Цвет.Синий;

BillWoodruff

Это и есть Win Forms TreeView ?

3 Ответов

Рейтинг:
22

BillWoodruff

Чтобы перечислить все TreeNodes в Win Forms TreeView, а также назначить различные BackColor и шрифт в зависимости от их уровня в TreeView:

private List<Color> colorList = new List<Color>
{
    // or use Color.AliceBlue 
    // or Color.FromArgb(red value, green value, blue value)
    Color.FromArgb(0xfff1de), 
    Color.FromArgb(0xdbe7eb),
    Color.FromArgb(0xf2f1eb)
};

private List<Font> fontList = new List<Font>
{
    new System.Drawing.Font("Arial", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))),
    new System.Drawing.Font("Arial", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))),
    new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)))
};

private void Form1_Load(object sender, EventArgs e)
{
    // other Load Event business ...

    // recursively enumerate the TreeNodes
    colorTreeViewNodes(treeView1.Nodes);
}

private void colorTreeViewNodes(TreeNodeCollection theNodes)
{
    foreach (TreeNode theNode in theNodes)
    {
        theNode.BackColor = colorList[theNode.Level];
        theNode.NodeFont = fontList[theNode.Level];

        if (theNode.Nodes.Count > 0) colorTreeViewNodes(theNode.Nodes);
    }
}
Этот код использует свойство ' Level каждого TreeNode в качестве индекса в списках цветов и шрифтов.


Gauri Bharde

Спасибо!!!!

BillWoodruff

Рад, что вы нашли мой ответ полезным. Обратите внимание, что Microsoft TreeView имеет некоторые известные проблемы при назначении шрифтов нескольких размеров на основе уровня узла: вы можете увидеть текст узла обрезанным в большем размере.

Это одна из многих причин, по которой я перешел на сторонний коммерческий TreeView для WinForms.

Рейтинг:
1

ravikhoda

вы можете изменить цвет и шрифт, используя приведенный ниже код.

Treeview.Nodes[0].backcolor = color.blue;
Treeview.Nodes[0].Nodefonts = your font;

однако в вашем случае вам нужно найти индекс нужного узла, используя свою собственную логику.


Рейтинг:
0

ravikhoda

Древовидный вид имеет множество доступных вариантов настройки. попробуйте использовать
LevelStyles / LeafNodeStyle / NodeStyle / ParentNodeStyle / RootNodeStyle и т. д. теги.

вы можете установить различные цвета и шрифт, используя вышеуказанные свойства.


BillWoodruff

Эти свойства доступны для TreeView в System.Web.UI.WebControls. Недоступно для WinForms TreeView.

ravikhoda

вы можете изменить цвет и шрифт, используя приведенный ниже код.

TreeView элемент.Узлы[0].backcolor = color.blue;
TreeView элемент.Узлы[0].Nodefonts = ваш шрифт;

однако в вашем случае вам нужно найти индекс нужного узла, используя свою собственную логику.