1

ページにたくさんのボタンがあります。すべてのボタンの背景色は白で、ボタンをクリックすると色が黄色に変わります。

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

ボタンを 1 つ追加して、黄色の背景色を赤色に変更したいと思います。これを行う方法?私はそれが次のようにできることを知っています:

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

しかし、もっと速い方法が必要なので、ボタンごとに特別に書く必要はありません

4

4 に答える 4

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;
        }
于 2012-12-10T17:51:43.310 に答える
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");
}
于 2012-12-10T17:49:28.317 に答える
0

PostBack を回避したい場合に備えて、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>

幸運を!

于 2012-12-10T23:31:45.047 に答える
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;
            }
        }
    }     
于 2012-12-10T17:52:24.100 に答える