• 利用LayoutControl动态创建参数界面


    在网页开发中,页面布局是非常重要的概念;在桌面开发中,利用LayoutControl控件也可方便进行页面布局。

    强大的DevExpress也提供了一些模板布局。

    但有时,为了增加重用性和灵活性,提升开发效率,还不得不根据参数创建动态一些界面控件。

    创建LayoutControlItem对象,并初始化其Control属性,然后添加到布局中即可。

    layoutControl1.BeginUpdate();
    for (int i = 0; i < 5; i++)
    {
        LayoutControlItem item1 = new LayoutControlItem();
        TextEdit textEdit = new TextEdit();
        item1.Control = textEdit;
        item1.Text = $"参数{i+1}:";
        layoutControl1.Root.Add(item1);
    }
    layoutControl1.EndUpdate();
    

    初始化更多的控件类型,代码如下(实际应用中,根据参数规则确定初始化的类型):

    layoutControl1.BeginUpdate();
    List<object> list=new List<object>()
    {
        new TextEdit(),
        new ComboBoxEdit(),
        new CheckEdit(),
        new SpinEdit(),
        new ButtonEdit(),
        new CalcEdit(),
        new DateEdit(),
        new ColorPickEdit()
    };
    for (int i = 0; i < list.Count; i++)
    {
        LayoutControlItem item1 = new LayoutControlItem();
        item1.Control = (Control)list[i];
        item1.Text = $"参数{i + 1}:";
        layoutControl1.Root.Add(item1);
    }
    layoutControl1.EndUpdate();
    

    基本控件有时满足不了业务需求,需要自定义用户控件,如下是一个文本框+按钮的示例。

    直接添加到界面上:

    LayoutControlItem item = new LayoutControlItem();
    item.Control = new UcSelect();
    item.Text = "自定义控件:";
    layoutControl1.Root.Add(item);
    

    这里至少存在三个需要改进的问题:

    (1)自定义控件与下面其他参数未右对齐(当标题实在太长时,应该放在控件的Top显示);

    (2)自定义控件高度异常,应该像下面的其他系统控件一样,占用的高度固定;

    (3)自定义控件的布局不正确,当窗口宽度增加时,显示不全。

    解决代码如下:

    在自定义控件设置MaximumSize的高度:

    public UcSelect()
    {
        InitializeComponent();
        this.MaximumSize = new Size(0, 30); 	//固定高度
    }
    

    修改后的代码如下:

    layoutControl1.BeginUpdate();
    
    LayoutControlItem item = new LayoutControlItem();
    item.Control = new UcSelect();
    item.Text = "自定义控件:";
    item.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
    layoutControl1.Root.Add(item);
    
    
    LayoutControlItem item2 = new LayoutControlItem();
    item2.Control = new UcSelect();
    item2.Text = "自定义控件2:";
    item2.TextLocation = Locations.Top;
    layoutControl1.Root.Add(item2);
    
    List<object> list=new List<object>()
    {
        new TextEdit(),
        new ComboBoxEdit(),
        new CheckEdit(),
        new SpinEdit(),
        new ButtonEdit(),
        new CalcEdit(),
        new DateEdit(),
        new ColorPickEdit()
    };
    for (int i = 0; i < list.Count; i++)
    {
        LayoutControlItem item1 = new LayoutControlItem();
        item1.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
        item1.Control = (Control)list[i];
        item1.Text = $"参数{i + 1}:";
        layoutControl1.Root.Add(item1);
    }
    layoutControl1.EndUpdate();
    

  • 相关阅读:
    Spring Boot 配置加载顺序详解
    JVM总结篇
    nginx负载均衡的策略
    布隆过滤器的方式解决缓存穿透问题
    Spring Cloud Eureka自我保护机制(服务无法剔除)
    缓存穿透,缓存击穿,缓存雪崩解决方案分析
    高并发秒杀系统总结
    Linux环境进程间通信(一)
    HDU 1695 GCD(容斥定理)
    数据结构精要------冒泡与直接排序算法
  • 原文地址:https://www.cnblogs.com/liweis/p/13499374.html
Copyright © 2020-2023  润新知