本帖最后由 Richard.Ma 于 2021-1-26 14:30 编辑
在进行界面开发时,下拉控件时我们经常需要用到的,普通的下拉控件,一般展开后显示的是一个列表,这个我们使用C1Combobox或者Winforms原生的Combobox就可以实现,而复杂一些的多列列表,C1Combo或也可以做到。
但是,某些情况下,我们需要在下拉内容中显示一个树状视图。 并且仍然支持点击选中 没有现成的控件可以实现此功能。
这个时候,我们可以使用C1DropDownControl这个灵活的下拉控件来实现如下图所示的供鞥
C1DropDownControl可以绑定一个空的下拉面板,此面板需要继承C1.Win.C1Input.DropDownForm ,最终效果如下
1.创建包含树状列表的下拉面板
1.1创建一个名称为TreeForm的类,继承DropDownForm,然后在设计界面插入一个C1TreeView
1.2重写OnOpen方法,在下拉面板打开时获取OwnerControl的值,选中对应的树状节点
1.3重写OnPostChanges方法,让下拉面板中数据改变时,能更新数据到OwnerControl
附代码:
- public partial class TreeForm : DropDownForm
- {
- public TreeForm()
- {
- InitializeComponent();
- this.Options = ((C1.Win.C1Input.DropDownFormOptionsFlags)(((C1.Win.C1Input.DropDownFormOptionsFlags.Focusable| C1.Win.C1Input.DropDownFormOptionsFlags.AlwaysPostChanges)| C1.Win.C1Input.DropDownFormOptionsFlags.AutoResize)));
- }
- protected override void OnOpen(EventArgs e)
- {
- string s = OwnerControl.Text;
- selectNode(c1TreeView1.Nodes[0], s);
- base.OnOpen(e);
- }
- protected override void OnPostChanges(EventArgs e)
- {
- if (c1TreeView1.SelectedNodes.Count() == 1)
- {
- OwnerControl.Value = c1TreeView1.SelectedNodes[0].GetValue();
- base.OnPostChanges(e);
- }
- }
- private void selectNode(C1TreeNode parentnode,string s) {
- foreach (C1TreeNode node in parentnode.Nodes)
- {
- if (node.GetValue().ToString() == s)
- {
- node.Selected = true;
- return;
- }
- else
- {
- selectNode(node, s);
- }
- }
- }
- }
复制代码
2.在需要使用树状下拉的界面中,拖入一个C1DropDown
然后在代码中为其绑定下拉面板为第一步中创建的面板
- c1DropDownControl1.DropDownForm = new TreeForm();
复制代码
3编译运行,即可实现上图效果
|
|