1

我在 Winform 应用程序上有一些按钮,并使用以下代码更改了它们的背景颜色和文本。

List<Button> buttons = new List<Button>();

foreach (Button bt in panel1.Controls)
{
    if (bt is Button)
    {
        buttons.Add(bt);
    }

}

int btext = 1;
foreach (var button in buttons)
{

    button.Text = btext.ToString();
    button.BackColor = Color.White;
    btext++;
}

但是在运行时查看表单时,按钮网格右下角的按钮显示文本“1”,网格左上角的按钮显示文本“36”。我希望并认为它应该是相反的。为什么它是这样的,我该如何改变它?非常感谢。

4

4 回答 4

3

我认为控件添加到panel1.Controls集合中的顺序在这里是相关的。您可以尝试为按钮设置 Tab 键顺序,然后按TabIndex属性对其进行排序。

foreach (var bt in panel1.Controls.OrderBy(c => c.TabIndex))
{
    if (bt is Button) 
    {
        buttons.Add(bt);
    }
}
于 2012-05-15T10:17:59.730 回答
1

尝试按控件位置排序

List<Button> buttons = new List<Button>();

foreach (var bt in panel1.Controls)
{
    if (bt is Button)
    {
        buttons.Add((Button)bt);
    }

}

var lst = buttons.OrderBy(x => x.PointToScreen(Point.Empty).Y).ThenBy(x => x.PointToScreen(Point.Empty).X);

int btext = 1;
foreach (var button in lst)
{

    button.Text = btext.ToString();
    button.BackColor = Color.White;
    btext++;
}

在此处输入图像描述

于 2012-05-15T10:06:33.013 回答
0

您可以尝试这种 LINQ 方法:

var buttons = panel1.Controls.OfType<Button>()
             .Select((b, i) => new { Button = b, Position = i + 1 });
foreach(var btn in buttons)
{
    btn.Button.Text = btn.Position.ToString();
    btn.Button.BackColor = Color.White;
}

或者,如果您需要它,请使用Reverse

foreach (var btn in buttons.Reverse())
{
    btn.Button.Text = btn.Position.ToString();
    btn.Button.BackColor = Color.White;
}
于 2012-05-15T10:06:52.733 回答
0

如果您只需要更改文本标签的顺序,您可以这样做:

List<Button> buttons = panel1.Controls.OfType<Button>().ToList();
buttons.Reverse();

int btext = 1;
foreach (var button in buttons)
{
    button.Text = btext.ToString();
    button.BackColor = Color.White;
    btext++;
}
于 2012-05-15T10:57:50.593 回答