Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复选框树视图_C#_Winforms_Checkbox_User Controls_Treeview - Fatal编程技术网

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);