2012-05-15 44 views
1

我在Winform應用程序上有一些按鈕,並且使用以下代碼更改了它們的背景顏色和文本。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」顯示在它。我希望並且認爲,它應該是相反的。爲什麼會這樣,我該如何改變它?非常感謝。通過控制的位置

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

+1

好了,所以我要做的就是改變線條詮釋btext = 36;和btext - ;但我仍然不明智,爲什麼我需要這樣做。 – user995689

+0

你使用過設計師嗎?因爲 - 據我所知 - 控件按字母順序實例化。所以如果你遍歷'panel1'的控件,你將按照字母順序遍歷你的按鈕。這可以解釋爲什麼你必須逆轉你的循環。 – basti

回答

3

我認爲控件添加到panel1.Controls集合的順序與此處相關。您可以嘗試設置按鈕的Tab鍵順序,然後按TabIndex屬性對它們進行排序。

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

非常感謝所有有用和多樣的答案。 – user995689

1

嘗試順序:

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; 
} 
0

你可以試試這個LINQ辦法

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++; 
}