winform应用程序中的按钮文本

时间:2012-05-15 10:01:59

标签: c# winforms

我在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 个答案:

答案 0 :(得分:3)

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

foreach (var bt in panel1.Controls.OrderBy(c => c.TabIndex))
{
    if (bt is Button) 
    {
        buttons.Add(bt);
    }
}

答案 1 :(得分: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++;
}

enter image description here

答案 2 :(得分: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;
}

答案 3 :(得分: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++;
}