找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-1-26 14:29  /   查看:2966  /  回复:0
本帖最后由 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

附代码:
  1. public partial class TreeForm : DropDownForm
  2. {
  3. public TreeForm()
  4. {
  5. InitializeComponent();
  6. this.Options = ((C1.Win.C1Input.DropDownFormOptionsFlags)(((C1.Win.C1Input.DropDownFormOptionsFlags.Focusable| C1.Win.C1Input.DropDownFormOptionsFlags.AlwaysPostChanges)| C1.Win.C1Input.DropDownFormOptionsFlags.AutoResize)));
  7. }
  8. protected override void OnOpen(EventArgs e)
  9. {
  10. string s = OwnerControl.Text;
  11. selectNode(c1TreeView1.Nodes[0], s);
  12. base.OnOpen(e);
  13. }
  14. protected override void OnPostChanges(EventArgs e)
  15. {
  16. if (c1TreeView1.SelectedNodes.Count() == 1)
  17. {
  18. OwnerControl.Value = c1TreeView1.SelectedNodes[0].GetValue();
  19. base.OnPostChanges(e);
  20. }

  21. }
  22. private void selectNode(C1TreeNode parentnode,string s) {

  23. foreach (C1TreeNode node in parentnode.Nodes)
  24. {
  25. if (node.GetValue().ToString() == s)
  26. {
  27. node.Selected = true;
  28. return;
  29. }
  30. else
  31. {
  32. selectNode(node, s);
  33. }
  34. }
  35. }
  36. }
复制代码


2.在需要使用树状下拉的界面中,拖入一个C1DropDown
然后在代码中为其绑定下拉面板为第一步中创建的面板
  1. c1DropDownControl1.DropDownForm = new TreeForm();
复制代码


3编译运行,即可实现上图效果



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部