1

私はうまく動作する次の方法を持っています:

button21.FlatAppearance.BorderSize = 0;
button21.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;

ご覧のとおり、私は多くのボタン (~30) を持っているので、すべてのボタンにスタイルを適用するのではなく、Form_Loadイベントで一度にすべてのボタンに適用してみませんか? だから私はこの方法を書いた:

public void ChangeButtonStyles()
{
    foreach (Control con in this.Controls)
    {
        if (con is Button)
        {
            Button but = con as Button;
            but.FlatAppearance.BorderSize = 0;
            but.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
        }
    }
}

しかし、マウスをボタンの上に置くと、背景の変化が見られるため、機能していません。これは、機能しbut.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;ていないことを証明しています

コードが機能しないのはなぜですか?

public Form1()
{
    InitializeComponent();

  // works
    //button21.FlatAppearance.BorderSize = 0;
    //button21.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;

  // doesn't work
    ChangeButtonStyles();
}

編集:解決策

public void ChangeButtonStyles()
{
    foreach (Control con in this.Controls)
    {
        if (con is Button)
        {
            Button but = con as Button;
            but.FlatAppearance.BorderSize = 0;
            but.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
        }
        if (con is GroupBox)
        {
            foreach (Control subcon in con.Controls)
            {
                if (subcon is Button)
                {
                    Button but = subcon as Button;
                    but.FlatAppearance.BorderSize = 0;
                    but.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
                }
            }
        }
    }
}
4

1 に答える 1

3

コードをデバッグして、実際に実行されるかどうかを確認しましたか? this.Controls は最上位のコントロールを返します。ボタンが他のコントロール内にネストされている場合は、より再帰的にする必要があります。

public void ChangeButtonStyles(Control source)
{
    foreach (Control con in source.Controls)
    {
        if (con is Button)
        {
            Button but = con as Button;
            but.FlatAppearance.BorderSize = 0;
            but.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
        }
        else
        {
            ChangeButtonStyles(con);
        }
    }
}
于 2012-08-30T18:54:01.000 に答える