C# 复选框树视图
我已经创建了一个用户控件,它由一个C# 复选框树视图,c#,winforms,checkbox,user-controls,treeview,C#,Winforms,Checkbox,User Controls,Treeview,我已经创建了一个用户控件,它由一个复选框控件和一个字符串组成,其中包含我希望为每个复选框保存的另一个值 用户可以选择或取消选择复选框 public partial class UserControl1 : UserControl { private CheckBox c = new CheckBox(); private string EAType; } 但是,它们有很多,而且表单布局看起来很凌乱。 因此,我想根据标准对它们进行分类,将它们组织在树视图中 这很容易将treevi
复选框
控件和一个字符串组成,其中包含我希望为每个复选框
保存的另一个值
用户可以选择或取消选择复选框
public partial class UserControl1 : UserControl
{
private CheckBox c = new CheckBox();
private string EAType;
}
但是,它们有很多,而且表单布局看起来很凌乱。
因此,我想根据标准对它们进行分类,将它们组织在树视图中
这很容易将treeview
设置为复选框treeview
,但是,如上所述,我为每个复选框存储了另一个字符串
是否可以使用usercontrol树视图
?如果是,如何进行?
欢迎任何其他想法……您是否需要一个用户控件来存储字符串
要将自定义信息添加到控件
中,您始终拥有标记
属性,要将自定义信息添加到树节点
中,您拥有树节点.Tag
属性(您可以在那里存储所需的内容、类或直接存储字符串)
在本例中,我有一个假设的集合对象
,标题
属性将确定树节点
标题,我将另一个自定义值(来自值
属性)存储到树节点.Tag
属性中。如果需要,可以直接存储对象本身:
foreach (var obj in objects)
treeView.Nodes.Add(new TreeNode { Text = obj.Title, Tag = obj });
要访问它们,您需要强制转换为适当的类型,例如(使用字符串):
var checkedNodes=treeView.Nodes.Cast()。其中(x=>x.Checked);
var selectedValues=checkedNodes.Select(x=>Convert.ToString(x.Tag));
或者,对于对象:
var selectedValues = treeView.Nodes
.Cast<TreeNode>()
.Where(x => x.Checked)
.Select(x => (YourObject)x.Tag);
var selectedValues=treeView.Nodes
.Cast()
.其中(x=>x.Checked)
.选择(x=>(YourObject)x.Tag);
最后请注意,您甚至可以使用其他列表类型:
- 对于简单的值列表,您可以使用带有复选框的
ListBox
。每个项目都是一个对象
,然后它可以是您想要的任何东西,只需覆盖ToString()
,以提供适当的显示文本
- 对于更复杂的列表(或包含更多要分组组织的项目),可以使用
列表视图
。与我们在TreeView
中看到的技术相同,每个ListViewItem
都有一个Tag
属性,您可以使用它来存储其他信息。如果只需要一个级别(多个组和一组项目),它可能比树状视图更方便,因为自定义更容易
无论您选择哪个列表或不选择哪个列表,只要使用一个普通的复选框
,您实际上不需要用户控件
,在每个控件中,您都有一个标记
属性用于此目的,对于更复杂的情况,您可以直接从右控件派生(复选框
)并添加所需的属性/方法<当您需要一个由多个控件组成的控件(例如,为了重用一些复杂的UI)时,code>UserControl
通常用于合成
var checkedNodes = treeView.Nodes.Cast<TreeNode>().Where(x => x.Checked);
var selectedValues = checkedNodes.Select(x => Convert.ToString(x.Tag));
var selectedValues = treeView.Nodes
.Cast<TreeNode>()
.Where(x => x.Checked)
.Select(x => (YourObject)x.Tag);