网络公司 营销型网站外贸业务流程图
网络公司 营销型网站,外贸业务流程图,四川建设学网官方网站登录,网站如何做下一页初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github#xff1a;codetoys#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C的#xff0c;可以在任何平台上使用。 目录
技术基础
保存列头
删…初级代码游戏的专栏介绍与文章目录-CSDN博客
我的githubcodetoys所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C的可以在任何平台上使用。 目录
技术基础
保存列头
删除列头
恢复列头
奇怪的BUG不能在多处添加或插入项
控件的Tag
处理逻辑
示例代码 如果界面上需要显示不同的列表主要是列头不同有几种思路实现
动态创建ListView处理显示位置比较麻烦还涉及到窗口缩放时的处理静态创建多个按需要显示隐藏多个重叠控件的初始位置可以在初始化时设置一次单个静态控件难点是记录正确的列头宽度本文就谈论这个问题
技术基础
保存列头
listView.Columns数组就是列头保存下来即可
删除列头
listView.Columns.RemoveAt(3); 删除指定位置的列。
恢复列头 删除之后再添加即可。
奇怪的BUG不能在多处添加或插入项 这个很头疼其实是ColumnHeader对象不能复用要先克隆所以保存列头是的代码是这样的 old_headers.Add(listView.Columns[3].Clone() as ColumnHeader);不好意思我的程序仍然会有随机的BUG发生…… 原因是虽然保存的时候用了Clone但是添加的时候没有导致添加后保存的数据也被修改了其实是指向同一个对象于是再次打开窗口的时候会遇到列已经被绑定到列表框的问题。所以高级语言的对象其实是引用比C的指针高级
控件的Tag 所有控件包括控件的数据条目都有tag属性可以用来绑定数据tag是Object类型的可以绑定任何数据结构。 强烈建议专门定义tag结构而不要直接使用string或者现成的对象因为需要在tag里增加信息的情形是很多的。 本示例代码涉及到一个树和一个列表相关信息记录在树节点的tag和列表的tag里。
处理逻辑 其实逻辑还是稍微有点复杂的
如果ListView没有列直接创建需要的列如果ListView已经有列符合需要什么也不做如果ListView已经有列不符合需要保存现有列头然后检查是否存在已经保存的列头有则恢复没有则直接创建
示例代码 本示例代码的列表显示只有两种同种类型的列头显示宽度会被记录不会因为切换显示而改变。 //这两个是旧列头隧道协议所需的列只有一个其余则有很多static ListColumnHeader columnHeaders_std new ListColumnHeader();static ListColumnHeader columnHeaders_tunnel new ListColumnHeader();//这个函数根据树节点来显示static public bool ShowChannels(TreeNode deviceNode, ListView listView){NodeTag? tag deviceNode.Tag as NodeTag;//这个tag是要显示的新信息if (null tag) return false;if(tag.nodeType! NodeTag.NodeType.NODETYPE_DEVICE)return false;listView.Items.Clear();if (0 listView.Columns.Count){//两种情形共有的三个列listView.Columns.Add(序号);listView.Columns.Add(Code);listView.Columns.Add(Name);}//保存可变部分string? old_code (listView.Tag as NodeTag)?.protocolCode;//当前ListView的tag是旧信息if (null ! old_code){ListColumnHeader old_headers;if (ProtocolCode.isTunnel(old_code)){old_headers columnHeaders_tunnel;}else{old_headers columnHeaders_std;}old_headers.Clear();while (listView.Columns.Count 3){old_headers.Add(listView.Columns[3].Clone() as ColumnHeader);//注意这里没有Clone会有随机BUG并且列头宽度会错误listView.Columns.RemoveAt(3);}}//恢复可变部分如果还没有保存过直接创建if (ProtocolCode.isTunnel(tag.protocolCode)){if (columnHeaders_tunnel.Count 0) listView.Columns.AddRange(columnHeaders_tunnel.ToArray());这里不对也要Cloneelse{listView.Columns.Add(paramCommand);}}else{if (columnHeaders_std.Count 0) listView.Columns.AddRange(columnHeaders_std.ToArray());这里不对也要Cloneelse{listView.Columns.Add(Type);listView.Columns.Add(Addr);listView.Columns.Add(function);listView.Columns.Add(transfer);listView.Columns.Add(Length);listView.Columns.Add(process);listView.Columns.Add(report);}}......(这里显示列表数据)listView.Tag tag;//更新listview的tagreturn true;}这里是结束
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88282.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!