winform控件tag使用规范

花生地 花生地     2022-10-03     448

关键词:

背景

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

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

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

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

 

  

winform公共控件及属性

1/button(按钮):autosize:自动匹配尺寸location:确定控件位置margin:控件与控件之间的尺寸maxsise:控件的最大尺寸minsize:控件的最小尺寸enable:确定是否启用控件visible:确定控件是否可见name:指示代码中用来标志该对象的名称tag:用... 查看详情

在devexpress程序中使用winform分页控件直接录入数据并保存

...s程序中使用GridView直接录入数据并保存的实现,以及使用Winform分页控 查看详情

将 WPF 控件与 WinForms 一起使用

】将WPF控件与WinForms一起使用【英文标题】:UsingaWPFControlwithWinForms【发布时间】:2021-05-2818:48:39【问题描述】:我有一个自定义的WPF按钮控件,我想将此控件与WinForm应用程序一起使用。我知道如何使用ElementHost将WPF用户控件与Win... 查看详情

c#winform控件布局变乱问题

事情是这样的:一个Form1面板上有很多控件,我用代码已经控制好了,控件可随窗体大小而自动缩放,但是当把该Form1缩小到任务栏的时候,再恢复到正常状态,控件的布局就乱了..不知诸位可碰过这情况?我的缩放代码如下:pub... 查看详情

WinForms:使用 c# 添加控件

】WinForms:使用c#添加控件【英文标题】:WinForms:addingacontrolwithc#【发布时间】:2021-07-0603:57:31【问题描述】:我是C#新手,我知道如何动态添加控件,但我不知道如何将该控件设置为this.[control_name]。请注意,这里的this是Form。这... 查看详情

c#winform中怎么获取imagelist控件中图片的名字

比如我的ImageList控件中有3张图片,分别叫A.jpg,B.jpg,C.jpg,我如何获取其中一张图片的名字,比如A.jpg图片的名字--A,在线等,求解答啊! ImageList.Images[i]的Name属性确实是读不到的。你可以把图片的名称按照images图片集的顺序以“,”... 查看详情

wpf使用winform自定义控件(代码片段)

...引用WindowsFormsIntegration.dllSystem.Windows.Forms.dll2、在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容:xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration... 查看详情

c#控件winform怎么使用

参考技术A在buttonA_Click里面加入:buttonB_Click(buttonB,newEventArgs()); 查看详情

winform使用barcodex控件预览和打印一维码

...rcodex.zip。  包含barcodex.ocx控件、barcodex帮助文档、两个winform控件的dll文件。2、控件的注册。(1)检测控件是否注册(方法不唯一)。  本例使用的是判断注册表中HKEY_CLASSES_ROOTTypeLib是否包含barcodex.ocx的项。  查看详情

在 WebBrowser 控件 WinForms 中使用 Chrome 引擎

】在WebBrowser控件WinForms中使用Chrome引擎【英文标题】:UseChromeengineinWebBrowsercontrolWinForms【发布时间】:2012-04-1613:08:42【问题描述】:可以在WindowsForms的WebBrowser控件中使用ChromeWebBrowserwebkit引擎吗?【问题讨论】:***.com/questions/2141... 查看详情

由于未解决的依赖关系,无法使用 Winforms 控件

】由于未解决的依赖关系,无法使用Winforms控件【英文标题】:UnabletouseWinformscontrolbecauseofunresolveddependencies【发布时间】:2010-11-0813:17:15【问题描述】:问题:我有一个依赖于myCli.dll的WinForms控件(\'MyControl\'),myCli.dll是一个用C++CL... 查看详情

winform跨窗体操作控件(使用委托)

Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作。实例介绍:两个窗体,Form1按钮打开Form2,然后在... 查看详情

无法在 WinForm 中使用 WPF 控件填充整个空间

】无法在WinForm中使用WPF控件填充整个空间【英文标题】:UnabletofillentirespacewithWPFcontrolinWinForm【发布时间】:2016-07-2303:24:23【问题描述】:我创建了WpfUserControl并将其托管在WinForm中。<UserControlx:Class="Sapphire.WpfUserControl"xmlns="http:/... 查看详情

c#winform控件使用

C#FileSystemWatcher在监控文件夹和文件时的用法 https://www.cnblogs.com/armyfai/p/4050279.htmlNotifyICon https://www.cnblogs.com/huashanqingzhu/p/6899383.htmlbackgroundWorker和PerformanceCounter https://www.cnblogs.c 查看详情

winform中弹出对话框,并在对话框中添加combobox控件

winform中弹出对话框,并在对话框中添加ComboBox控件,并将用户选择的值返回。假设你的winform类名是form1,你在你的工程里新加一个叫form2的画面,放上你要的combobox等控件,实现你需要的显示功能。然后再form1里需要弹出form2的地... 查看详情

winform------treelistlookupedit控件的使用

1.数据库添加表dbo.Graduation2.从工具栏拖出TreeListLookUpEdit控件,修改部分属性DisplayName:选中后显示在控件的值ValueMember:C#代码中使用空间名.EditValue所获取到的值KeyFiledName:主键名(与数据库列名对应)ParentFiledName:父键名(与数据库列名对... 查看详情

在wpf中使用winform控件方法

1、     首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll。2、     在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容:即:xmlns:wf="clr-namespace:Syste 查看详情

使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?

】使用自定义WinForms控件,我可以更改嵌套控件停靠在里面的矩形吗?【英文标题】:WithacustomWinFormscontrol,canIchangetherectanglethatnestedcontrolsdockinside?【发布时间】:2016-02-1719:01:57【问题描述】:我正在尝试创建一个行为类似于GroupBo... 查看详情