如何将宽度相等的 EmptySpaceItems 和 LayoutControlItems 添加到具有 DevExpre

本文关键字:添加 LayoutControlItems DevExpre EmptySpaceItems | 更新日期: 2023-09-27 18:01:30

注意:本问题中描述的所有控件都是 DEVEXPRESS 控件。我正在尝试以编程方式将LayoutControlItemsEmptySpaceItems添加到 DevExpress LayoutControl上的LayoutControlGroup中。

我的项目要求我有一个LayoutControlGroup面板,该面板依赖于从布局控件上的另一个控件中选择的一组筛选器项。 如果未选择任何筛选器,则不会显示任何"布局控件项"。 如果选择了一个或多个筛选器,则我根据选择将一个或多个控件添加到组中。

我尝试执行此操作的方法如下:

1(在LayoutControl的设计器中,我已经用LayoutControlItem s创建了LayoutControlGroup。 总共有 6 个,每个LayoutControlItem包含一个包含ListBoxControlPanelControl

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()方法是否是正确的方法?

如何将宽度相等的 EmptySpaceItems 和 LayoutControlItems 添加到具有 DevExpre

我建议在运行时放置控件。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,因为它使用起来要简单得多。