1. 程式人生 > 實用技巧 >利用LayoutControl動態建立引數介面

利用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();