如何使用listview或树视图控制tabpage

时间:2016-04-19 09:35:12

标签: c# listview

在许多程序中,例如PuTTY,uBittorrent,notepad ++和WinSCP,他们使用某种listview或treeview来组织首选项表单,就像下面显示的图像一样: enter image description here enter image description here 所以我想问的是:在C#中是否有任何本地方式来组织此布局中的winform控件?我想通过当用户单击左侧的listview项时手动加载面板中的右侧控件。 但有没有更好的解决方案直接由C#支持?

感谢〜

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现。首先得到布局,我会使用表格布局面板作为表单中最顶级的控件,并将其设置为2列。左列将是列表视图,右列将显示具有当前所选列表视图项的关联页面。

我会为每个可能的列表视图项创建一个简单的模型,如

class ViewController: NSViewController {

    @IBOutlet var label: NSTextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        label.frame = NSRect(x: 0, y: 0, width: 200, height: 17)
        label.translatesAutoresizingMaskIntoConstraints = true
        label.setNeedsDisplay()
    }
}

当然,您可以创建泛型类并使用构造函数参数来完成所有这些操作,而不是为列表视图中的每个可能项创建模型。但是在获得ListViewItemModel对象后,可以将它们添加到列表视图中,并将DisplayName属性设置为“ItemDescription”,以便在ListView中显示该值。

然后在父窗体中创建一个事件处理程序,处理ListView的SelectedIndexChanged事件,该事件将关联的自定义用户控件添加到TableLayOutPanel的右列

public class PageViewItemModel()
{
    public string ItemDescription { get; }

    public UserControl CustomUserControlForViewItem { get; }

    public PageViewItemModel()
    {
        // Initialize the associated custom user control here
        CustomUserControlForViewItem = new YourCustomUserControlClass();

        // Set the display name for the list view
        ItemDescription = MyListViewItemName;
    }
}

这就是它的要点。