如何使用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;
}
将您的一个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来实现这一点,因为它非常快。此处示例