2014-07-23 43 views
0

我有一個TreeView和一個關聯的ImageList。將圖像添加到父節點和子節點的步驟是什麼?如何從c#中分配的圖像列表中爲父節點和子樹節點分配圖像?

所有節點都是從代碼中添加的。沒有什麼是從設計中完成的。

public void fill_tree() 
     { 
      host_listbox_new.Items.Clear(); 
      foreach (KeyValuePair<string, host_config> hlitem in host_list) 
      { 
       string sitem = hlitem.Key; 
       if (host_list[sitem].sessionOptions == null) 
        host_list[sitem].sessionOptions = new SessionOptions(); 
       host_list[sitem].sessionOptions.Protocol = Protocol.Sftp; 
       host_list[sitem].sessionOptions.HostName = host_list[sitem].ip; 
       host_list[sitem].sessionOptions.UserName = host_list[sitem].username; 
       host_list[sitem].sessionOptions.Password = host_list[sitem].password; 
       host_list[sitem].sessionOptions.PortNumber = Convert.ToInt32(host_list[sitem].port); 
       //host_list[sitem].sessionOptions.SshHostKeyFingerprint = host_list[sitem].rsa; 

       if (treeView1.SelectedNode != null) 
       { 
        treeView1.SelectedNode.Nodes.Add(hlitem.Key.ToString()); 

       } 
       else 
       { 
        treeView1.Nodes[0].Nodes.Add(hlitem.Key.ToString()); 
       } 



      } 
     } 

private void Parent_Load(object sender, EventArgs e) 
     { 
      read_process_config(); 
      read_host_config(); 
      host_listbox.Items.Clear(); 
      treeView1.BeginUpdate(); 
      treeView1.Nodes.Add("Servers"); 
      fill_tree(); 
      treeView1.EndUpdate(); 
      treeView1.ExpandAll(); 
      connect_server_bttn.Enabled = false; 

     } 

我想補充的項目,即子節點,以它們各自有他們面前一個圖像服務器父節點(綠色形象,如果hlitem.Value.connectedtrue。紅色的圖像,如果hlitem.Value.connectedfalse

但我不知道關於treeview或imagelist。 任何人都可以幫助我瞭解整個事情嗎?

+0

在'TreeNode tn ='前綴'..Nodes.Add..'命令然後你可以像這樣分配一個ImageIndex:'tn.ImageIndex = 0;' – TaW

+0

沒有給你。你能寫得詳細嗎? @TaW –

回答

0

Add命令返回對新節點的引用。您可以使用它來設置節點的樣式。 將代碼更改爲:

if (treeView1.SelectedNode != null) 
{ 
    TreeNode tn =treeView1.SelectedNode.Nodes.Add(hlitem.Key.ToString()); 
    tn.ImageIndex = yourIndex; 

} 
else 
{ 
    TreeNode tn =treeView1.Nodes[0].Nodes.Add(hlitem.Key.ToString()); 
    tn.ImageIndex = yourIndex; 
} 

或者您需要設置索引的任何邏輯。

如果您需要的父節點的指數,你可以寫:

tn.ImageIndex = tn.Parent.ImageIndex; 

您可能還需要加時賽檢查Add方法的其他格式。有些讓你直接包含ImageIndex。您還可以包含SelectedIndex;特別是如果你不要希望你應該包括它,以防止樹使用它的默認SelectedIndex!

這將設置節點,顯示第2圖像,無論選擇與否:

TreeNode tn =treeView1.Nodes[0].Nodes.Add(sitem, sitem, 1,1); 

既然你不能設置一個對象的屬性您已經創建了它之前,你不能設置子節點在創建父節點時。相反,你可以用一個簡單的功能做的修改:

void copyImgIndexToChildren(TreeNode tn) 
{ 
    if (tn.Nodes.Count > 0) 
     foreach (TreeNode cn in tn.Nodes) cn.ImageIndex = tn.ImageIndex; 
} 

void copyImgIndexToAllChildren(TreeNode tn) 
{ 
    if (tn.Nodes.Count > 0) 
     foreach (TreeNode cn in tn.Nodes) 
     { 
      cn.ImageIndex = tn.ImageIndex; 
      copyImgIndexToAllChildren(cn); 
     } 
} 

第一種方法改變了直接的childNodes只,第2遞歸地改變起始節點以下的所有級別。

順便說一句:有沒有理由在您的代碼中使用hlitem.Key.ToString()而不是sitem

+0

好的我正在嘗試這個 –

+0

treeview1的ImageIndex屬性是什麼?有從imageList1的集合中選擇的圖像。所有項目都顯示相同的圖像。 –

+0

是的,它是你的'ImageList'的索引。我假設你已將它分配給TreeView?每個__Node__都有這個屬性,而不是TreeView本身。您需要根據您的邏輯爲每個節點設置它。 – TaW

相關問題