在網頁開發中,頁面布局是非常重要的概念;在桌面開發中,利用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();

