如何将宽度相等的 EmptySpaceItems 和 LayoutControlItems 添加到具有 DevExpre
本文关键字:添加 LayoutControlItems DevExpre EmptySpaceItems | 更新日期: 2023-09-27 18:01:30
注意:本问题中描述的所有控件都是 DEVEXPRESS 控件。我正在尝试以编程方式将LayoutControlItems
和EmptySpaceItems
添加到 DevExpress LayoutControl
上的LayoutControlGroup
中。
我的项目要求我有一个LayoutControlGroup
面板,该面板依赖于从布局控件上的另一个控件中选择的一组筛选器项。 如果未选择任何筛选器,则不会显示任何"布局控件项"。 如果选择了一个或多个筛选器,则我根据选择将一个或多个控件添加到组中。
我尝试执行此操作的方法如下:
1(在LayoutControl
的设计器中,我已经用LayoutControlItem
s创建了LayoutControlGroup
。 总共有 6 个,每个LayoutControlItem
包含一个包含ListBoxControl
的PanelControl
2( 当表单启动时,我使用 LayoutControlItem.HideFromCustomization()
方法从LayoutControlGroup
中隐藏每个LayoutControlItems
。
3(在用户选择一个或一组过滤器后,我运行以下代码,尝试从左到右将控制项还原到组中。
this.layoutGroupScenarioPortfolios.BeginUpdate();
LayoutControlItem layoutControlToAdd;
LayoutControlItem lastLayoutControlItem = null;
for (int loop = 0; loop < selectedFilters.Length; loop++)
{
layoutControlToAdd = LayoutControlItemFactoryUtil(selectedFilters[loop]);
if (layoutControlToAdd == null)
{
continue;
}
if (loop < 1)
{
layoutControlToAdd.RestoreFromCustomization(this.layoutControlGroupSelectedFilters);
}
else
{
layoutControlToAdd.RestoreFromCustomization(lastLayoutControlItem, DevExpress.XtraLayout.Utils.InsertType.Right);
}
lastLayoutControlItem = layoutControlToAdd;
}
for (int loop = 0; loop < numOfEmptySpaceItemsNeeded; loop++)
{
layoutControlToAdd = new EmptySpaceItem(this.layoutControlGroupSelectedFilters)
{
Owner = this.layoutControlGroupSelectedFilters.Owner
};
layoutControlToAdd.RestoreFromCustomization(lastLayoutControlItem, DevExpress.XtraLayout.Utils.InsertType.Right);
lastLayoutControlItem = layoutControlToAdd;
}
this.layoutControlGroupSelectedFilters.TextVisible = true;
this.layoutGroupScenarioPortfolios.EndUpdate();
从代码中可以看出,一个循环将适当的ListControlBox
添加到组中。 第二个循环尝试添加空白区域项,以确保列表框控件不会占用整个组。 在此代码结束时,应该有 6 个项目跨越组控件,每个项目在控件中的宽度相同。
问题是添加的第一个控件占用了分组框空间的一半,而其他 5 个项目则平均适合分组框的剩余一半。
在第一个循环中,具有一个参数的RestoreFromCustomization()
方法是否是正确的方法?
我建议在运行时放置控件。LayoutControl 将管理 LayoutControlGroups 和 EmptySpaceItems。
下面是我编写的代码,用于在运行时将用户控件放入 LayoutControl:
LayoutControlItem lastItem = null;
int RowWidth = 0;
public void AddMyControl()
{
MyControl myControl = new MyControl("");
myControl.Name = Guid.NewGuid().ToString();
LayoutControlItem item = new LayoutControlItem();
item.Name = Guid.NewGuid().ToString();
item.Text = "";
MyLayoutControl.BeginUpdate();
//We need to determine where to insert the new item. Right or Below. If there is
//space on the right we insert at Right else we just add the item.
if(lastItem == null || lastItem != null && (MyLayoutControl.Width - UserControlWidth) < RowWidth)
{
MyLayoutControl.AddItem(item);
RowWidth = item.MinSize.Width;
}
else
{
MyLayoutControl.AddItem(item, lastItem, DevExpress.XtraLayout.Utils.InsertType.Right);
}
item.Control = myControl;
RowWidth += item.MinSize.Width;
lastItem = item;
item.Name = " ";
MyLayoutControl.BestFit();
MyLayoutControl.EndUpdate();
}
如果您只需要从左到右的控件,则流程布局面板将更适合。有时 LayoutControl 很难使用。我最终选择了flowlayoutpanel,因为它使用起来要简单得多。