日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

treeview托拽和动态添加节点以及treeview和xml的交互的实现

發布時間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 treeview托拽和动态添加节点以及treeview和xml的交互的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????????前兩天被winform的treeview搞暈了,現在終于有時間了,把自己用到的知識簡單的寫出來。供和我一樣初用winform 的treeview的同志批評指正。
????????一。treeview的托拽的實現(樹與樹之間的):
??????????? 首先,你要兩棵樹了,以treeview1和treeview2來說。設置其allowdrop屬性為true。
?????????????? 添加拖拽函數

private?void?treeView_ItemDrag(object?sender,?System.Windows.Forms.ItemDragEventArgs?e)
????????
{
????????????DoDragDrop(e.Item,?DragDropEffects.Move);?
????????}


????????
private?void?treeView_DragEnter(object?sender,?System.Windows.Forms.DragEventArgs?e)
????????
{
?????????e.Effect?
=?DragDropEffects.Move;
????????}


????????
private?void?treeView_DragDrop(object?sender,?System.Windows.Forms.DragEventArgs?e)
????????
{
????????????TreeNode?NewNode;?
????????????
if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode",?false))?
????????????
{
????????????????Point?pt?
=?((TreeView)sender).PointToClient(new?Point(e.X,?e.Y));
????????????????TreeNode?DestinationNode?
=?((TreeView)sender).GetNodeAt(pt);?
????????????????NewNode?
=?(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");?
????????????????
if(DestinationNode.TreeView?!=?NewNode.TreeView)?
????????????????
{
????????????????????DestinationNode.Nodes.Add((TreeNode)?NewNode.Clone());
????????????????????DestinationNode.Expand();?
????????????????}
?
????????????}
?
????????}

這是實現拖拽在主要代碼,接下來就是初始化的時候構造幾個節點,在form的page_load函數里加入

private?void?my1_Load(object?sender,?System.EventArgs?e)
????????
{????????
????????????TreeNode?ParentNode1;?
????????????TreeNode?ParentNode2;?
????????????ParentNode1?
=?treeView1.Nodes.Add("WTS");?
????????????ParentNode2.Tag?
=?"";
????????????ParentNode1.Nodes.Add(
"WTS1");?
????????????ParentNode1.Nodes[
0].Tag?=?"";
????????????ParentNode1.Nodes.Add(
"WTS2");????
????????????ParentNode1.Nodes[
1].Tag?=?"";
????????????ParentNode1.Expand();?
????????????ParentNode2?
=?treeView2.Nodes.Add("wts");
????????????ParentNode2.Tag?
=?"";
????????????ParentNode2.Nodes.Add(
"wts1");?
????????????ParentNode2.Nodes[
0].Tag?=?"";
????????????ParentNode2.Nodes.Add(
"wts2");?
????????????ParentNode2.Nodes[
1].Tag?=?"";
????????????ParentNode2.Expand();?
????????????
this.treeView1.ItemDrag?+=?new?System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);?
????????????
this.treeView2.ItemDrag?+=?new?System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);?
????????????
this.treeView1.DragEnter?+=?new?System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);?
????????????
this.treeView2.DragEnter?+=?new?System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);?
????????????
this.treeView1.DragDrop?+=?new?System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);?
????????????
this.treeView2.DragDrop?+=?new?System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);?
????????}

就可以了。
?? 二。動態添加節點及和XML交互。
?????????? 這個方法很多,這里就不多介紹,貼出部分代碼,請批評指正:

創建根節點#region?創建根節點
????????
private?TreeNode?CreateNewNode()
????????
{
????????????TreeNode?node?
=?new?TreeNode(this.txtTitle.Text.Trim());
????????????node.Tag?
=?"";
????????????
return?node;
????????}

????????
#endregion
?
????????
從XML中得到數據#region?從XML中得到數據
????????
private?void?GetDataFromXML?()
????????
{
????????????
//從XML中讀取數據到TreeView????????????
????????????try
????????????
{
????????????????XmlDocument?xmlDoc?
=?new?XmlDocument();
????????????????xmlDoc.Load(
"Menu.xml");

????????????????XmlNodeList?xmlNodes?
=?xmlDoc.DocumentElement.ChildNodes;

????????????????
this.treeView1.BeginUpdate();
????????????????
this.treeView1.Nodes.Clear();
????????????????XmlNodeToTreeNode(xmlNodes,?
this.treeView1.Nodes);
????????????????
this.treeView1.EndUpdate();
????????????}

????????????
catch
????????????
{
????????????}

????????????
????????}

????????
#endregion
?
????????
向XML中寫數據#region?向XML中寫數據
????????
private?void?InsertDataIntoXML?()
????????
{
????????????
//將TreeView保存到XML文件中????????????
????????????XmlDocument?doc?=?new?XmlDocument();
????????????doc.LoadXml(
"<Menu></Menu>");
????????????XmlNode?root?
=?doc.DocumentElement;
????????????doc.InsertBefore(doc.CreateXmlDeclaration(
"1.0",?"utf-8",?"yes"),?root);
????????????TreeNodeToXml(
this.treeView1.Nodes,?root);
????????????doc.Save(
"Menu.xml");
????????}

????????
#endregion
?
????????
TreeNodeToXml#region?TreeNodeToXml
????????
private?void?TreeNodeToXml(TreeNodeCollection?treeNodes,?XmlNode?xmlNode)
????????
{
????????????XmlDocument?doc?
=?xmlNode.OwnerDocument;
????????????
foreach?(TreeNode?treeNode?in?treeNodes)
????????????
{
????????????????XmlNode?element?
=?doc.CreateNode("element",?"Item",?"");
????????????????XmlAttribute?attr?
=?doc.CreateAttribute("WTS");
????????????????treeNode.Tag?
="";
????????????????attr.Value?
=?treeNode.Text;
????????????????element.Attributes.Append(attr);
????????????????element.AppendChild(doc.CreateCDataSection(treeNode.Tag.ToString()));
????????????????xmlNode.AppendChild(element);

????????????????
if?(treeNode.Nodes.Count?>?0)
????????????????
{
????????????????????TreeNodeToXml(treeNode.Nodes,?element);
????????????????}

????????????}

????????}

????????
#endregion
?
????????
XmlNodeToTreeNode#region?XmlNodeToTreeNode
????????
private?void?XmlNodeToTreeNode(XmlNodeList?xmlNode,?TreeNodeCollection?treeNode)
????????
{
????????????
foreach?(XmlNode?var?in?xmlNode)
????????????
{
????????????????
if?(var.NodeType?!=?XmlNodeType.Element)
????????????????
{
????????????????????
continue;
????????????????}

????????????????TreeNode?newTreeNode?
=?new?TreeNode();
????????????????newTreeNode.Text?
=?var.Attributes["WTS"].Value;????????????
????????????????
if?(var.HasChildNodes)
????????????????
{
????????????????????
if?(var.ChildNodes[0].NodeType?==?XmlNodeType.CDATA)
????????????????????
{
????????????????????????newTreeNode.Tag?
=?var.ChildNodes[0].Value;
????????????????????}


????????????????????XmlNodeToTreeNode(var.ChildNodes,?newTreeNode.Nodes);
????????????????}

????????????????treeNode.Add(newTreeNode);
????????????}

????????}

????????
#endregion
?XmlNodeToTreeNode

?

當添加了這些函數,接下來就是調用的問題了。

?? 這些是一些比較笨的方法,并且沒有加異常處理另外考慮在也不全面,希望看到的,有好方法的不吝指教!謝謝!

轉載于:https://www.cnblogs.com/wts/archive/2007/03/26/688760.html

總結

以上是生活随笔為你收集整理的treeview托拽和动态添加节点以及treeview和xml的交互的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。