我的世界局域网指令使用指令对局域网开放,后面添加什么参数可以让玩家使用命令,

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。本帖子已过去太久远了,不再提供回复功能。您的位置: >>
本文是从WinForm场景中实现了在网站开发中经常使用的checkbox选中功能
今天,在做一个指纹管理平台的界面上,遇到了一些问题,因为公司的基础库中没有针对Winform平台的操作,所以在一个部门选择的场景中,关于如何获取部门TreeView中被选中的项目被难住了。所幸还有一个神器叫做搜索引擎,故谷歌一番,发现Asp.net下的这个问题很好解决,但是关于Winform平台下的类似问题,如凤毛麟角啊!
当然,今天我也是查了很久,终于发现了两篇不错的文章,帮助我解决了这个问题,不敢独享,结合自己对使用其方法的心得,特意记录下来,并通过一个小例子和大家一起分享。
问题是这样的
有一个部门列表,多级的(或者说无限极),我们在Winform端列出来(这个很简单)后,需要对其进行部分的选择,然后通过一个按钮,提交选择好的部门,进入下一个业务操作场景,今天我遇到的问题就是,如何获取这个部门TreeView中,各个级别所选取的项目呢?如下图:
在这里只是用一个例子来说明,所以就简单一点吧,如左图所示,我们的任务就是通过程序获取被选中的部门,将其信息送到下一个业务场景之中,在传统的Asp.net中,Web.UI下的Treeview控件提供了很方便的接口方法,用于获取被选中的项目,但是来到了Winform下,瞬间杯催&&
发现不能用Asp.net的思路来做这个事情后,我立马谷歌了一下,发现如下这篇文章,说的很不错,基本上解决了我遇到的问题,原文地址如下:&&
我总结了一下,原作者的大概思路应该如下:
图1-简单的流程图示意
解决问题:
在页面(窗体)申明两个变量:
第一个是用于存放被选项目的,文中是StringBuilder对象。
第二个是一个Tag标签,按照原文的话就是&我们在TreeView的结点中用Tag来附加了CheckBox是否选中的标识信息&,字符串对象。
用代码来描述就是如下形式:
string tag = "True";//Tag标签StringBuilder nodesT//容器
接下来,我们就开始去处理AfterCheck事件,让程序能够&记住&我们选择过的项目。无论大家有没有看过那篇文章,其中提到过&树的递归算法&,关于算法,大家可以参考如下这个链接:
在了解完算法后,相信大家能离家如下一段的代码了吧:这里就照搬这位博友的code了
private void TraversNodes(TreeNode parent)
TreeNode node =
if (node != null)
if (node.Tag != null && node.Tag.ToString() == tag)
nodesTag.AppendFormat("node:{0} has checked\n", node.Text);
if (node.FirstNode != null)////如果node节点还有子节点则进入遍历
TraversNodes(node.FirstNode);
if (node.NextNode != null)////如果node节点后面有同级节点则进入遍历
TraversNodes(node.NextNode);
AfterCheck事件代码:
treeView1_AfterCheck
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
if (e.Action != TreeViewAction.Unknown)
TreeNode node = e.N
if (node.Tag == null)
node.Tag =//附加结点信息
node.Tag = null;
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
for (int i = 0; i & e.Node.Parent.Nodes.C i++)
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
e.Node.Parent.Checked =
////记得如果父节点被选中或取消,记得设置它的tag哦
e.Node.Parent.Tag =
e.Node.Parent.Tag = null;
这个方法的调用时机应该是什么时候呢?对于我的场景来说,应该是再点击那个业务按钮之后,在之前,我们的AfterCheck事件代码唯一要做的事情就是如下图所示的一个流程:
当我们点击业务按钮之后,为其添加如下代码即可:
private void button1_Click_1(object sender, EventArgs e)
nodesTag = new StringBuilder();
TreeNode node = treeView1.TopN//得到TreeView的根结点,注意根结点只有一个
//每次搜寻到根结点
while (node.PrevNode != null)
node = node.PrevN
TraversNodes(node);//遍历根结点
MessageBox.Show(nodesTag.ToString());
再好一点:
到这里呢,按理说问题已经被解决完了。我们获取到了选中的部门,但是,按照常规来说,应该&选中节点的时候,如果节点存在子节点,可以选中全部的子节点;如果取消一个节点的选中状态,当前节点同时又存在父节点的话,就取消父节点的选中状态&,怎么办呢?
我觉得自己很懒,&搜&的一下,给大家链上一篇文章,我觉得写的很不错啊,如下:
好啦,根据原文的意思,我们结合之前的获取选中状态的代码,修改如下:
新的AfterCheck
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
if (e.Action != TreeViewAction.Unknown)
TreeNode node = e.N
if (node.Tag == null)
node.Tag =//附加结点信息
node.Tag = null;
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
bool bol = true;
if (e.Node.Parent != null)
for (int i = 0; i & e.Node.Parent.Nodes.C i++)
if (!e.Node.Parent.Nodes[i].Checked)
bol = false;
e.Node.Parent.Checked =
////记得如果父节点被选中或取消,记得设置它的tag哦
e.Node.Parent.Tag =
e.Node.Parent.Tag = null;
新的CheckAllChildNodes方法:
根据博友Flynn2009的提示,应该注意代码需要有修改,如下:
node.Tag = nodeChecked ? (bool)tag :
新的CheckAllChildNodes
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
foreach (TreeNode node in treeNode.Nodes)
node.Checked = nodeC
node.Tag =////记得在这里为选中的项目设置tag属性
if (node.Nodes.Count & 0)
this.CheckAllChildNodes(node, nodeChecked);
好啦,在这里呢,我们就完成了获取Treeview中CheckBox选中状态的小例子,并且呢,还人性化的设置了一个关于父子选项的效果。文章就到这里为止吧,希望能给大家带来收获。欢迎拍砖!!!
最后附上本文的示例项目代码:Vs2008+.Net 2.0
.NET技术热门文章
.NET技术最新文章1529人阅读
TreeView 通常和CheckBoxs一起使用,显示并选择一些条目,特别是在等级分割的状态下,例如
当我选择一个父节点,希望该父节点下所有的子节点都被选中,取消一个节点,希望他所有的父节点都取消,例如
代码如下所示
private void setParentNodeCheckedState(TreeNode currNode, bool state)
TreeNode parentNode = currNode.P
parentNode.Checked =
if (currNode.Parent.Parent != null)
setParentNodeCheckedState(currNode.Parent, state);
private void setChildNodeCheckedState(TreeNode currNode, bool state)
TreeNodeCollection nodes=currNode.N
if (nodes.Count & 0)
foreach (TreeNode tn in nodes)
tn.Checked =
setChildNodeCheckedState(tn, state);
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
if (e.Action == TreeViewAction.ByMouse)
textBox1.Text = e.Node.T
if (e.Node.Checked == true)
setChildNodeCheckedState(e.Node, true);
else if(e.Node.Checked == false)
setChildNodeCheckedState(e.Node, false);
if (e.Node.Parent != null)
setParentNodeCheckedState(e.Node, false);
欢迎讨论指正。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18256次
排名:千里之外
原创:28篇
(1)(1)(1)(2)(2)(1)(1)(1)(1)(1)(9)(7)> 获取treeView选中CheckBox的所有子节点,该怎么解决
获取treeView选中CheckBox的所有子节点,该怎么解决
lovewyh & &
发布时间: & &
浏览:43 & &
回复:2 & &
悬赏:0.0希赛币
获取treeView选中CheckBox的所有子节点就是我选取了那些子节点前的CheckBox就我要这些子节点& 怎么做到 & 高手,给点示例代码 &
&只要被选中的都获取& 我用  C# code  
foreach (TreeNode note in treeView1.SelectedNode.Nodes)
if(note.Checked)
//这里得到的都是父节点 !
可是我要的是子节点
是一个CheckBox全选treeView 还是treeView根节点选中 所有子节点就全选?
lovexi888 & &
11:42:22 & &
& & (0)(0)引用要用递归循环下 &private void CheckNode(TreeNode note)
foreach (TreeNode note in note.Nodes)
if (note.Checked)
CheckNode(note);
}调用foreach (TreeNode note in treeView1.SelectedNode.Nodes)
if(note.Checked)
CheckNode(note);
}lovexiaojing1983 & &
11:42:22 & &
& & (0)(0)引用
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&

我要回帖

更多关于 局域网关机指令 的文章

 

随机推荐