如何在winforms中水平放置列表项

约翰·P。

我有一个自定义控件,该控件在[没有设计人员的帮助下]会手动初始化:

// Form1.cs
private byte totalControls;
private List<MyControl> controls;

public Form1()
{
    InitializeComponent();
    totalControls = 22;
    controls = new List<MyControl>(totalControls);
    for (byte i = 0; i < totalControls; i++)
    {
        controls.Add(new MyControl(i));
        panel1.Controls.Add(controls[i]);

        // My Problem:
        controls[i].Location = new Point(3 + (32 * i), 3);
        if ((i % 10 == 0) && (i != 0))
        {
            controls[i].Location = new Point(3 + (32 * i), 3 + (32 * i));
        }

        controls[i].Name = "myControl" + i.ToString();
        controls[i].Size = new Size(32, 32);
        controls[i].TabIndex = i;
        controls[i].Text = string.Empty;
    }
}

因此,正如您从Location为每个控件设置I所看到的,我试图将每个32x32大小的控件按彼此相邻的水平顺序放置。但我也想增量Location.YSize.Y每10次迭代-这将使得控制开始另一行。我还需要以Location.X某种方式重置

我需要让每 10 个控件出现在前 10 个下方 32 个像素的位置。使用模数运算符只对第 10 个控件执行此操作,甚至没有将其位置设置正确......

提前致谢!

托马斯·韦勒

你对模的想法很好,这是一个工作版本

int verticalOffset = 32;
var horizontalOffset = 32;
var numberOfControlsPerRow = 10;
controls[i].Location = new Point(
    3 + horizontalOffset*(i%numberOfControlsPerRow),
    3 + verticalOffset*(i/numberOfControlsPerRow)
);
// remove the if-statement

如您所见,我%用于 x 坐标。在 10 个项目的情况下,i%10将是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 然后在 0, 1, 2, ... 重新开始,所以它总是环绕。

对于 y 坐标,我使用i/10. 请注意,这是一个整数除法,因此大括号很重要。在十个项目的情况下,i/10将是 0, 0, 0, 0, 0, 0, 0, 0, 0 然后是 1, 1, 1, 1, 1, ...

这样你甚至可以摆脱if声明。

(请注意,我引入了一些变量来摆脱“幻数”。您可能会将它们转换为常量以进行优化。并且您应该进一步为这两个幻数 3 引入一个名称,即horizo​​ntalMargin 和 verticalMargin)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ConstraintLayout中垂直或水平放置视图?

如何在相对布局中水平放置视图等距?

如何在python中水平放置单选按钮

如何在ScrollView中水平放置多个UIView?

如何在HTML5 / css3中水平放置水平行的“表格”中?

如何水平放置iframe?

如何水平放置下拉列表和textInput

如何将按键(图例)水平放置在组中

如何使用CSS在表格中水平放置div

列表旁边水平放置的图像

我当前由图像和文本组成的水平滚动列表将文本水平放置在图像上。如何在下面放置文字?

在HTML5中将三个列表水平放置(并排放置)

如何使Tapestry的BeanEditor水平放置?

如何自动水平放置多个div?

无法在 Angular 中水平放置项目

将图例水平放置在 tmaps 中

我如何在代码中水平放大频谱图?

水平放置图像

如何对角放置文本,但水平放置字母?

如何在Android上水平放置ListPopupWindow /其他视图的中心?

如何在Android上水平放置ListPopupWindow /其他视图的中心?

如何在Android上水平放置ListPopupWindow /其他视图的中心?

如何在弹出窗口中将我的标题中心水平放置?

骰子未在Unity中的平面中水平放置

如何在水平滚动有序列表中居中活动列表项?

如何使用CSS在按钮之间水平放置空格?

如何水平放置Material-UI组件

如何水平放置div与父div的右边界重叠?

如何保持水平放置的输入字段始终对齐?