为TreeView正色

这段时间需要用到树形菜单,理所当然的想到了treeview,构建菜单数据表-读取并生成节点...
一切都很顺利,但是最后应用到页面上面的时候,颜色问题让我头痛了半天:
selected节点和hover节点的颜色是在丑陋(如果是浅色的底色还好一些,可是项目中是黑色的底色)
于是这两中节点上面的字就变的难以辨认(如果显示器老化或颜色比较暗的话就是一片漆黑了...)
无论怎样设置selectedstyle和hoverstyle都无济于事,最后只好在csdn发贴求助,呵呵没过多久就没孟子老大
一语点醒-“修改htc中的相关样式”,我怎么就没想到
打开/webctrl_client/1_0/treeview.htc文件,好家伙3000行... ...  既然是混色的感觉,应该是alpha吧,搜之...
找到如下几行
[code]
var oFilter = oItem.filters.item("DXImageTransform.Microsoft.Alpha");
 if (oFilter)
 {
       oFilter.opacity *= 2;   //这里改成oFilter.opacity=100,还有个地方是oFilter.opacity /= 2,同样100
}

g_styles["hoverstyle"] = "color: highlighttext; background-color:highlight; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50,style=0);";   //这里的opacity也是100
[/code]
他们分别是默认的样式和改变的样式,
呵呵,一切ok了;当时弄起来可没这么快:
http://community.csdn.net/Expert/topic/3443/3443524.xml?temp=.9843408

另外附上一个树的生成算法:
[code]
private void creatdv()
  {
   string c="select classID,class,parentID from Aclass order by orderID";
   db d=new db(str_conn,c);  //自己写的一个数据库链接类
   d.initialdbconnection();
   d.objsconn.Open();
   SqlDataReader sdr=d.objscomm.ExecuteReader();
   DataTable dt = new DataTable("table");
   dt.Columns.Add("classID",System.Type.GetType("System.String"));
   dt.Columns.Add("class",System.Type.GetType("System.String"));
   dt.Columns.Add("pID",System.Type.GetType("System.String"));

   while(sdr.Read())
   {
    DataRow dr=dt.NewRow();
    dr["classID"]=sdr["classID"].ToString();
    dr["class"]=sdr["class"].ToString();
    dr["pID"]=sdr["parentID"].ToString();
    dt.Rows.Add(dr);
   }
   d.objsconn.Close();
   DataView dv=dt.DefaultView;
   CreateTree(tv.Nodes,0,dv);
  }

  private void CreateTree(TreeNodeCollection classNodeCollection ,int pID,DataView dv)
  {  
      dv.RowFilter="PID="+pID;
      int tmpParentFolderID=0;
      foreach(DataRowView drv in  dv)
      {
           TreeNode tn=new TreeNode();
          tn.ID=drv.Row["classID"].ToString();
         tn.NodeData=drv.Row["classID"].ToString();
         tn.Text=drv.Row["class"].ToString().Trim();
          tmpParentFolderID=Int32.Parse(drv.Row["pID"].ToString().Trim());
         classNodeCollection.Add(tn);
         CreateTree(classNodeCollection[classNodeCollection.Count - 1].Nodes,Int32.Parse(tn.ID),dv);
      }      
  }
[/code]
主要是一个递归函数


ps:第一次在自己的blog里写东西,看了很多大侠的blog获益良多,也不能让自己的blog总是空着了,算是开荒了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要为TreeView添加ComboBox节点,您需要使用自定义节点。下面是一个简单的示例: ```csharp // 创建一个自定义节点类 public class ComboBoxNode : TreeNode { private ComboBox comboBox; public ComboBoxNode(string text) : base(text) { comboBox = new ComboBox(); comboBox.DropDownStyle = ComboBoxStyle.DropDownList; comboBox.Width = 100; comboBox.Items.Add("Option 1"); comboBox.Items.Add("Option 2"); comboBox.Items.Add("Option 3"); this.Controls.Add(comboBox); } public string SelectedItem { get { return comboBox.SelectedItem.ToString(); } } } // 在TreeView中添加ComboBoxNode private void AddComboBoxNode() { ComboBoxNode node = new ComboBoxNode("ComboBox Node"); treeView1.Nodes.Add(node); } // 获取选定的ComboBoxNode的选项 private void GetSelectedComboBoxItem() { if (treeView1.SelectedNode is ComboBoxNode) { ComboBoxNode node = (ComboBoxNode)treeView1.SelectedNode; string selectedItem = node.SelectedItem; MessageBox.Show("Selected item: " + selectedItem); } } ``` 在上面的示例中,我们创建了一个名为 `ComboBoxNode` 的自定义节点类。该类包含一个 `ComboBox` 控件,并添加到节点的控件集合中。我们还为该类添加了一个名为 `SelectedItem` 的属性,用于获取选中的 `ComboBox` 选项。 接下来,我们在 `TreeView` 控件中添加了一个 `ComboBoxNode` 节点,然后使用 `GetSelectedComboBoxItem` 方法获取了选中的 `ComboBoxNode` 的选项。 请注意,由于 `ComboBoxNode` 是自定义节点,因此您需要通过代码来处理节点的操作,例如选择节点和展开/折叠节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值