我创建了一个由checkbox
控件和一个字符串组成的用户控件,该字符串包含我想为每个checkbox
保存的另一个值。
用户可以选择或取消选择复选框。
public partial class UserControl1 : UserControl
{
private CheckBox c = new CheckBox();
private string EAType;
}
但是,它们很多,而且表单布局
看起来很乱。
因此,我想按标准对它们进行分类,将它们组织在 TreeView
中。
将treeview
设置为checkbox-treeview
非常容易,但是,正如前面提到的,我有另一个字符串要为每个存储。
用户控件 TreeView
可能吗?如果是,如何?
欢迎任何其他想法...
最佳答案
您是否需要一个UserControl
来存储字符串?
要将自定义信息添加到 Control
,您始终具有 Tag
属性,并将自定义信息添加到 TreeNode
,您始终具有 TreeNode .Tag
属性(您可以在其中存储您想要的内容、类或直接存储您的字符串)。
foreach (var obj in objects)
treeView.Nodes.Add(new TreeNode { Text = obj.Title, Tag = obj.Value });
在此示例中,我有一个假设的集合 objects
,Title
属性将确定 TreeNode
标题,并且我存储另一个自定义值(来自 >Value
属性)到 TreeNode.Tag
属性中。如果您愿意,可以直接存储对象本身:
foreach (var obj in objects)
treeView.Nodes.Add(new TreeNode { Text = obj.Title, Tag = obj });
要访问它们,您需要转换为正确的类型,例如(使用字符串):
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);
最后请注意,您甚至可以使用其他列表类型:
- 对于简单的值列表,您可以将
ListBox
与复选框一起使用。每个项目都是一个对象
,它可以是您想要的任何内容,只需重写ToString()
即可提供正确的显示文本。 - 对于更复杂的列表(或者想要将更多项目分组),您可以使用
ListView
。我们在TreeView
中看到的技术相同,每个ListViewItem
都有一个Tag
属性,您可以使用它来存储附加信息。如果您只需要一个级别(具有一组项目的多个组),它可能比 TreeView 更方便,因为自定义更容易。
无论您选择或不选择哪个列表,并且使用普通的CheckBox
,您实际上并不需要UserControl
,在每个控件中您都有一个Tag
属性用于此目的,对于更复杂的情况,您可以直接从右侧控件(例如 CheckBox
)派生并添加所需的属性/方法。 UserControl
(通常)用于当您需要由多个控件组成的控件时进行组合,例如重用某些复杂的 UI。
关于c# - 复选框的树形 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816627/