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