程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 自定義泛型可序列化TreeView

自定義泛型可序列化TreeView

編輯:.NET實例教程
 要存儲一個類型,序列化是最簡單的一種實現方式,TreeView本省並不支持序列化,但是TreeNode支持,因此需要從TreeNode下手, 所有序列化TreeVIEw其實就是序列化TreeNode.
1. 自定義一個類SerialzeTreeNode繼承TreeNode繼承並實現ISerializable接口,其實TreeNode已經實現了ISerializable接口,在實現這個接口時要調用基類TreeNode的Serialize函數,要不然序列化的節點會不全,在Serialize函數中添加自己的序列化邏輯, 
2. 重寫所有的TreeNode構造函數,特別是與序列化有關的那個構造函數,public TreeNode(SerializationInfo serinfo, StreamingContext context)就是這個了,要不然就不能正確的反序列化了 
3. 有可能的話實現一個IDeserializationCallback接口,以便於在反序列化後初始化一些變量之類的動作,因為,反序列化只調用反序列化的那個構造函數. 
4. 添加泛型支持,其實也可以用Tab用來存儲要序列化的值,但是Tab是object的,不是很好,因此增加一個泛型 
變量是很有意義的,這樣便於強化類型也能夠很好的利用IDE的智能感知功能. 
public class SerializTreeNode<T>:TreeNode,ISerializable 

     public T TTag; 

5. 如果要使用小圖標的話還要做些工作,雖然查看反序列化中的數據,有ImageSelectedIndex項,但是卻無效,因此在實現ISerializable接口中順便把ImageSelectedIndex屬性也序列化進去,然後在反序列化的時候設置其值,這樣就可以保存其圖片索引了.Key與Index沖突,只能一個有效,因此可以二選一,看TreeVIEw是如何設置圖片的了. 
6. 對自定義類加上Serializable可序列化標記,要不然都正確了還是無法正確工作的.,同時泛型的那個類也必須要標記為Serializable,否則也會出錯. 
7. 擴展TreeVIEw提供序列化和反序列化的函數以保存樹節點和加載保存的樹節點. 
    public interface ISerializeTreeVIEw 
    { 
                bool SaveTreeVIEw(string filename); 
                bool LoadTreeVIEw(string filename); 
    } 
可以定義這樣的一個接口  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved