c# - 复选框的树形 View

标签 c# winforms checkbox user-controls treeview

我创建了一个由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 });

在此示例中,我有一个假设的集合 objectsTitle 属性将确定 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/

相关文章:

c# - HRESULT : 0x80131040 - Microsoft. WindowsAzure. 未找到存储

c# - 在 winform 中使用 monogame

windows - 我的 Visual Studio 2013 应用程序在 Windows 10 上运行时字体模糊

javascript - 如何在 Kendo 模板中设置带有名称属性的 Treeview 复选框?

jquery - 验证复选框组

C# 如何从基类中的派生类获取特定类型的所有字段?

c# - 在 .net 4.5 中使用 Async API 的示例串行端口通信代码?

c# - 通过 MouseBinding 将鼠标事件与 ViewModel 连接

c# - 拒绝访问!?我无法从 C 驱动器上的安装文件夹中打开文件

javascript - 使用 jQuery 检查是否选中了多个复选框?