如何使用foreach为多个按钮设置按钮属性

本文关键字:按钮 设置 属性 何使用 foreach | 更新日期: 2023-09-27 18:25:35

我在ASP.NET页面中有12个按钮。我想给按钮上色;但我的代码不起作用。我会检查断点,但按钮。BackColor=颜色。深绿色;则不执行代码。

ASP设计编码-

  <form id="form1" runat="server" style="background-color:Silver; height:100%; min-height:300px">   
       <div style="height:100%;">
            <div style="height:20%;">
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>    
        </div>
        <div id="content" runat="server" class="content" style="height:70%; min-height:180px">    
            <div >               
                <asp:Button ID="Button1" runat="server" Text="Button"  style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button2" runat="server" Text="Button" style="width:32%" 
                    Enabled="False"/>               
                <asp:Button ID="btnUp" runat="server" Text="UP" onclick="btnUp_Click" style="width:32%" /> <br /><br />
                <asp:Button ID="Button3" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button4" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button5" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" /> <br /><br />
                <asp:Button ID="Button6" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button7" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button8" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" /> <br /><br />
                <asp:Button ID="Button9" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />
                <asp:Button ID="Button10" runat="server" Text="Button" style="width:32%" 
                    Enabled="False" />            
                <asp:Button ID="btnDown" runat="server" Text="DOWN" onclick="btnDown_Click" style="width:32%" /> <br /><br />
            </div><!-- /grid-b -->        
        </div>       
          <div id="footer" class="footer" style="height:10%;">
             <a href="OutLet.aspx" >Home</a>
             <a href="Selection.aspx">Selection</a>
        </div>
        </div>
    </form>

*C#编码-*

var buttons = this.form1.Controls.OfType<Button>();
        foreach (var button in buttons)
        {
           button.BackColor = Color.DarkGreen;
        }

如何使用foreach为多个按钮设置按钮属性

将您的一个div替换为ASP.NET面板(呈现为div,但可以从codeehind引用):

<asp:Panel id="ButtonPanel" runat="server">               
    <asp:Button ID="Button1" runat="server" Text="Button"  style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button2" runat="server" Text="Button" style="width:32%" 
        Enabled="False"/>               
    <asp:Button ID="btnUp" runat="server" Text="UP" onclick="btnUp_Click" style="width:32%" /> <br /><br />
    <asp:Button ID="Button3" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button4" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button5" runat="server" Text="Button" style="width:32%" 
        Enabled="False" /> <br /><br />
    <asp:Button ID="Button6" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button7" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button8" runat="server" Text="Button" style="width:32%" 
        Enabled="False" /> <br /><br />
    <asp:Button ID="Button9" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />
    <asp:Button ID="Button10" runat="server" Text="Button" style="width:32%" 
        Enabled="False" />            
    <asp:Button ID="btnDown" runat="server" Text="DOWN" onclick="btnDown_Click" style="width:32%" /> <br /><br />
</asp:Panel>

然后你可以循环这个面板中的所有控件,按下每个按钮,然后做你需要做的事情:

foreach(Control c in ButtonPanel.Controls){
    if(c.GetType()==typeof(Button)){
        Button btn = (Button)c;
        btn.BackColor = Color.DarkGreen;
    }
}

编辑:如@Abbas所述,如果至少使用.NET framework 3.5,则可以使用Enumerable.OfType方法:

foreach(Button btn in ButtonPanel.Controls.OfType<Button>()) {
        btn.BackColor = System.Drawing.Color.DarkGreen;
}

要回答您的问题,这里的问题是Controls属性只会为您提供form1的直接子控件。要获取按钮,请使用:

var buttons = this.content.Controls.OfType<Button>();

然而,我也同意Jayanga的观点,CSS会做得更好。

控件集合仅包含直属子项。我的猜测是var buttons中没有项目。

foreach( Control c in this.[immediate parent ID].Controls )
{
    Button b = c as Button;
    if( b != null )
    {
        b.BackColor = Color.DarkGreen;
    }
}

正如@Jayanga的评论所指出的,您可以(也应该)在页面中使用CSS设置按钮的样式。

除了需要专门使用codeehind来设置按钮的背景色之外,我建议您使用javascript来实现这一点,因为它非常快。此处示例