利用LayoutControl動態建立引數介面
阿新 • • 發佈:2020-08-14
在網頁開發中,頁面佈局是非常重要的概念;在桌面開發中,利用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();