2012-12-10 63 views
1

我在页面上有很多按钮。每个按钮都有白色作为背景颜色,当我点击按钮时,它会将颜色更改为黄色。如何用多余按钮更改多个按钮的背色

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if(((Button)sender).BackColor != Color.Red) 
    {((Button)sender).BackColor = Color.Yellow;} 
} 

有一个额外的按钮,我想将背景颜色从黄色变为红色。这个怎么做? 我知道它可以这样做:

protected void Button7_Click(object sender, EventArgs e) 
{ 
    if (Button1.BackColor == Color.Yellow) 
    { Button1.BackColor = Color.Red; } 
    if (Button2.BackColor == Color.Yellow) 
    { Button2.BackColor = Color.Red; }   
} 

,但我需要一个更快的方法,所以我没有写的每一个按钮专门

回答

3

//占位符的名称。在这种情况下,所有的控件都在<form id="form1" runat="server" />,所以我把form1.Controls

foreach (var item in form1.Controls) 
     { 
      if (item is Button) 
      { 
       if (((Button)item).BackColor == Color.Red) 
       { 
        ((Button)item).BackColor = Color.Yellow; 
       } 
      } 
     } 

LINQ查询可以写成

foreach (Button item in form1.Controls.OfType<Button>().Where(item => (item).BackColor == Color.Red)) 
     { 
      (item).BackColor = Color.Yellow; 
     } 
+0

使用LINQ中的'OfType'简化了这段代码。 – Servy

+0

@Servy:我还添加了LINQ版本:) – Moiz

+0

我会在那里添加一些换行符,并且当它本身不需要将'item'包含在括号中时,但这些只是美学上的改变。你也应该改变颜色为黄色,而不是红色。 – Servy

2

很抱歉的编辑。将所有按钮放在PlaceHolder中。您可以在PageLoad中调用此代码。

foreach (Control item in PlaceHolder1.Controls) 
    { 
     if(item.GetType()== typeof(Button)) 
     { 
      Button btn = (Button)item; 
      btn.Click += new EventHandler(FunctionName); 
     } 

    } 


protected void FunctionName(object sender, EventArgs e) 
{ 
    //You code here to change colors 
    Response.Write("Hello World"); 
} 
+1

您不应该将该类型作为字符串进行比较,您应该使用可以使用的类型系统并将其与'Button'作为类型进行比较。 – Servy

+0

谢谢Servy。我改变了它。 – arunlalam

+1

正如我评论[这个答案](http://stackoverflow.com/a/13806371/1159478),你可以使用'OfType'来做到这一点更简单。 – Servy

0
protected void Button1_Click(object sender, EventArgs e) 
    { 
     if(((Button)sender).BackColor != Color.Red) 
     {((Button)sender).BackColor = Color.Yellow;} 
    } 

    protected void button7_Click(object sender, EventArgs e) 
    { 
     foreach (var control in this.Controls) 
     { 
      if (control is Button && (Button)sender != control && ((Button)control).BackColor == Color.Yellow) 
      { 
       ((Button)control).BackColor = Color.Red; 
      } 
     } 
    }  
+0

为什么当按钮已经通过'sender'传递给你时,你在迭代整个'Controls'集合?此外,任何时候这被称为它会导致背景颜色为红色,它不会切换。 – Servy

+0

我以为他只想要一个在任何时候都标记为红色的按钮。我更新了我的答案@Servy。 –

0

下面是JavaScript的答案,如果你想避免回传:

<head runat="server"> 
    <title></title> 
    <script language="javascript" type="text/javascript"> 
     function changeColor() { 

      var items = document.getElementById("buttons").getElementsByTagName("input"); 

      for (var i = 0; i < items.length; i++) { 
       if (items[i].style.background == "red") 
        items[i].style.background = "yellow"; 
       else 
        items[i].style.background = "red"; 
      } 
      return false; 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div id="buttons"> 
     <asp:Button ID="Button1" runat="server" Text="Button" BackColor="Red" /> 
     <asp:Button ID="Button2" runat="server" Text="Button" BackColor="Red" /> 
     <asp:Button ID="Button3" runat="server" Text="Button" BackColor="Red" /> 
     <asp:Button ID="Button4" runat="server" Text="Button" BackColor="Red" /> 
     <asp:Button ID="Button5" runat="server" Text="Button" BackColor="Red" /> 
     <asp:Button ID="Button6" runat="server" Text="Click Me" BackColor="Red" OnClientClick="return changeColor()" /> 
    </div> 
    </form> 
</body> 
</html> 

祝你好运!

相关问题