PDA

View Full Version : تغییر رنگ هر level در treeview



saeedhushmand
دوشنبه 09 مرداد 1391, 09:56 صبح
سلام
من می خوام هر level در treeview به یک رنگ در بیاد....

Mahmoud.Afrad
دوشنبه 09 مرداد 1391, 10:43 صبح
از تابع بازگشتی بایستی استفاده کنید:
Random rnd = new Random();
private void rootNodesPaint(TreeView treeView)
{
if (treeView1.Nodes.Count > 0)
{

Color col = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));
foreach (TreeNode tn in treeView1.Nodes)
{
tn.BackColor = col;
//if ((col.R + col.G + col.B) / 3 < 127)
// tn.ForeColor = Color.White;
//else
// tn.ForeColor = Color.Black;
tn.ForeColor = Color.FromArgb(255 - col.R, 255 - col.G, 255 - col.B);
if (tn.Nodes.Count > 0)
subNodesPaint(tn);
}
}
}

private void subNodesPaint(TreeNode treeNode)
{
if (treeNode.Nodes.Count > 0)
{

Color col = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));
foreach (TreeNode tn in treeNode.Nodes)
{
tn.BackColor = col;
//if ((col.R + col.G + col.B) / 3 < 127)
// tn.ForeColor = Color.White;
//else
// tn.ForeColor = Color.Black;
tn.ForeColor = Color.FromArgb(255 - col.R, 255 - col.G, 255 - col.B);
if (tn.Nodes.Count > 0)
subNodesPaint(tn);
}
}
}

و به صورت زیر استفاده کنید مثلا
private void Form1_Load(object sender, EventArgs e)
{
treeView1.ExpandAll();

rootNodesPaint(treeView1);
}

saeedhushmand
سه شنبه 10 مرداد 1391, 12:54 عصر
دوست عزیز ممنون از کمکت ...
این کد پس زمینه شاخه ها رو اونم به صورت رندم تغییر می ده من می خوام متن رنگش تغییر کنه بعد رنگ هر شاخه هم ثابت باشه مثل عکس زیر...

90535

Mahmoud.Afrad
سه شنبه 10 مرداد 1391, 19:01 عصر
خوب فقط forecolor را عوض کن.
Random rnd = new Random();
private void rootNodesPaint(TreeView treeview)
{
if (treeView1.Nodes.Count > 0)
{
Color col = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));

foreach (TreeNode tn in treeView1.Nodes)
{
tn.ForeColor = col;
if (tn.Nodes.Count > 0)
subNodesPaint(tn);
}
}
}

private void subNodesPaint(TreeNode treenode)
{
if (treenode.Nodes.Count > 0)
{
Color col = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));

foreach (TreeNode tn in treenode.Nodes)
{
tn.ForeColor = col;
if (tn.Nodes.Count > 0)
subNodesPaint(tn);
}
}
}اگر هم نمیخوای رندوم باشه باید از قبل لیستی از رنگها رو داشته باشی و هر سطحو با یکی رنگ کنی.