繁体   English   中英

Flow Layout Panel问题

[英]Flow Layout Panel issues

我正在尝试制作控件列表。 为此,我使用了流布局面板和自定义项。 在读取XML文件后,我使用我的项目填充流程布局面板。 对于少量项目,一切接缝都可以,但是对于像流程布局面板中的371个项目这样的数字,会出现问题。 在流程布局面板95的底部缺少项目,并且接缝要重叠。 我认为,这个项目的空间仍然是创建的。 我附上了一个产生效果的屏幕。 控件在数组中创建,然后迭代该数组以将控件添加到流布局面板。

http://img510.imageshack.us/img510/3201/screen2011916213527199.jpg

谢谢。

LE:

public delegate void AddHistoryItemDelegate(Control itm);
        public void AddHistoryItem(Control itm)
        {
            if (InvokeRequired)
            {
                Invoke(new AddHistoryItemDelegate(AddHistoryItem), new object[] { itm });
            }
            else
            {
                flowLayoutPanel1.Controls.Add(itm);
            }
        }
foreach (Control c in histroryItems)
            {
                controls++;
                backgroundWorkerLoadHistory.ReportProgress(controls);
                //flowLayoutPanel1.Controls.Add(c);
                AddHistoryItem(c);
            }

代表在那里,因为所有这一切都发生在一个单独的线程中。 histroryItems是一个控件列表。

LE:如果它是重要的,我观察到,如果我从列表中删除一个项目,在列表加载后,它就会得到安排。 尝试一点hack来查看在线程末尾添加和删除控件是否有任何影响。

你可以试试这个:

        this.flowLayoutPanel1.SuspendLayout();

在添加控件之前:

        this.flowLayoutPanel1.ResumeLayout();

添加控件后。 也许应该连续执行以下操作:

        this.flowLayoutPanel1.PerformLayout();

和/或:

        this.flowLayoutPanel1.Refresh();

我发现我必须这样做:

private void flpChoices_Scroll(object sender, ScrollEventArgs e)
{
   Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None);
   if (c == null) flpChoices.PerformLayout();
}

flpChoices是我的FlowLayout Panel 现在我不认为滚动事件是在鼠标滚轮运动时触发的,所以我不知道该怎么做。

编辑:即使滚轮有隐藏(不在属性窗口):

void flpChoices_MouseWheel(object sender, MouseEventArgs e)
{
  Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None);
  if (c == null) flpChoices.PerformLayout();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM