【问题标题】:Windows Forms Top Property BugWindows 窗体顶部属性错误
【发布时间】:2023-03-05 19:21:02
【问题描述】:

我正在尝试使用具有相同高度和宽度的任意数量的控件填充容器。我允许该容器由用户缩小或增长,并且该容器将组织控件,使其尽可能适合一行中的大多数控件。这是组织它的代码:

        int row = 0;
        int column = 0;            
        for (int i = 1; i <= controls.Count; i++)
        {
            controls.Values[i-1].Top = row * controls.Values[0].Height;
            controls.Values[i-1].Left = column * controls.Values[0].Width;

            if (i % controlsPerRow == 0)
            {
                // This finishes a row
                row++;
                column = 0;
            }
            else
            {
                column++;
            }
        }

我遇到的问题是,在循环的第一次迭代中,我将控件高度乘以行并将该值分配给控件 Top 属性。第一行是 0,第一个高度是 165。0 * 165 = 0,但是 Top 属性在赋值为 0 后包含一个神奇的 -20。

有人知道这是怎么发生的吗?

【问题讨论】:

  • 您是否在调试器中检查了row * controls.Values[0].Height 实际上是0?还有,它是什么控制?

标签: c# forms controls properties


【解决方案1】:

您正在尝试重写 FlowLayoutPanel
考虑改用它。


此外,您的 controls 字段似乎是 Dictionary&lt;Something, Control&gt;
请注意,Dictionary.Values 的迭代顺序无法保证,这意味着您不会按照控件添加到字典中的顺序循环这些控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多