我在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”。我希望,并且想,它应该是反过来的。它为什么会这样,我该怎么改呢?非常感谢。
答案 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++;
}
答案 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++;
}