zoukankan      html  css  js  c++  java
  • Winform控件Tag使用规范

    背景

    Tag在WinForm控件中经常被用来存储临时数据,类型为object,但是当程序中多个地方使用到Tag时,容易造成Tag使用的混乱,Tag是如此重要的一个属性,应该要好好考虑下如何有效的使用Tag服务于程序开发。

    借鉴Web开发时,Js可以通过自定义属性,将状态绑定到Dom节点的自定义Attribute上,这也是绝大多数js插件,附加状态数据的方式。如果把字典引入到Tag中,规范约定Tag就是一个键值对组成的字典,那么对状态的存取就不会局限于一个状态,而且通过有效的管理可以更大化的发挥Tag字段的优势

    基于以上想法,订立此Tag使用规范

    winform控件Tag的常常用来临时存储依附于控件的数据,为了避免控件使用过程中,tag不易管理的问题,对tag使用进行一些规范。 不要直接对控件Tag进行操作, 而是使用Control上的如下四个扩展方法

     一个使用示例

    附录:TreeFilterHelper的实现

        public class TreeFilterHelper
        {
    
            #region [Field]
    
            private readonly TreeList _tree;
            private readonly TextEdit _edit;
            private readonly List<TreeListNode> _collapseNodes = new List<TreeListNode>();
    
            #endregion
    
            #region [Public]
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="tree">要实现筛选功能的TreeList控件</param>
            /// <param name="edit"></param>
            /// <param name="immediate"></param>
            public TreeFilterHelper(TreeList tree, TextEdit edit, bool immediate)
            {
                if (tree == null||edit == null) { return; }
                _tree = tree;
                _edit = edit;
                InitTreeList();
                if (immediate)
                {
                    _edit.TextChanged += (sender, e) =>
                    {
                        FilterText(_edit.Text.Trim());
                    };
                }
            }
    
            private void InitTreeList()
            {
                _tree.OptionsBehavior.EnableFiltering = true;
                _tree.OptionsFilter.FilterMode = FilterMode.Extended;
                _tree.HideFindPanel();
            }
    
            /// <summary>
            /// 筛选文字
            /// </summary>
            /// <param name="text">要筛选的文字</param>
            public void FilterText(string text)
            {
                if (string.IsNullOrWhiteSpace(text))
                {
                    ClearFilter();
                }
                else
                {
                    if (_collapseNodes.Count == 0)
                    {
                        if (_tree.HasChildren)
                        {
                            AppendCollapseNodes(_tree.Nodes);
                        }
                    }
                    _tree.SuspendLayout();
                    _tree.ExpandAll();
                    _tree.ApplyFindFilter(text);
                    _tree.ResumeLayout();
                }
            }
    
            private void AppendCollapseNodes(TreeListNodes nodes)
            {
                var eor = nodes.GetEnumerator();
                while (eor.MoveNext())
                {
                    var node = eor.Current as TreeListNode;
                    if (node == null) { continue; }
                    if (!node.Expanded)
                    {
                        _collapseNodes.Add(node);
                    }
                    if (node.HasChildren)
                    {
                        AppendCollapseNodes(node.Nodes);
                    }
                }
            }
           
            /// <summary>
            /// 清除筛选
            /// </summary>
            public void ClearFilter()
            {
                _tree.ApplyFindFilter(string.Empty);
                if (_collapseNodes == null) return;
                _tree.SuspendLayout();
                _collapseNodes.ForEach(one => one.Expanded = false);
                _collapseNodes.Clear();
                _tree.ResumeLayout();
            }
    
            #endregion
    
        }

    通过以上代码实现了TreeFilterHelper状态记录对象,附加于TreeList控件,需要过滤TreeList时,只需按照规范取出Tag中的TreeFilterHelper,调用其相应方法。

      


     文章作者:花生(OutMan)

    发布地址:http://www.cnblogs.com/WangHuaiSheng/ 

    发布时间:2017-12-02

    本文版权归作者和博客园共有,欢迎转载,

    但未经作者同意必须保留此段声明,

    且在文章页面明显位置给出原文连接。

     

      

  • 相关阅读:
    JVM五大知识点
    VIM命令
    JVM之GC算法
    SpringMVC之搭建框
    Mybatis之延迟加载机制
    分页查询
    Mybatis之占位符与拼接符
    == 和 equal
    LAMBDA表达式常用 (全)
    Jquery 时间格式化
  • 原文地址:https://www.cnblogs.com/WangHuaiSheng/p/7953831.html
Copyright © 2011-2022 走看看