2

Windows フォーム アプリケーションに複数のボタンがあり、btnhoverこのようなスタイルを適用したい

private void button1_MouseEnter(object sender, EventArgs e) {
  button1.UseVisualStyleBackColor = false;
  button1.BackColor = Color.GhostWhite;
}
private void button1_MouseLeave(object sender, EventArgs e) {
  button1.UseVisualStyleBackColor = true;
}

このスタイルを 1 か所に配置し、フォーム内のすべてのボタンに自動的に適用したいと考えています。どうすればこれを行うことができますか、私を助けてください、事前に感謝します

4

2 に答える 2

1

これを 1 か所にまとめて自動スタイルのフォームを作成したい場合は、独自のクラスになります。

class ButtonStyledForm : Form
{
    protected override void OnControlAdded(ControlEventArgs e)
    {
        base.OnControlAdded(e);

        if (e.Control.GetType() == typeof(Button))
        {
            e.Control.MouseEnter += button_MouseEnter;
            e.Control.MouseLeave += button_MouseLeave;
        }
    }    

    protected override void OnControlRemoved(ControlEventArgs e)
    {
        base.OnControlRemoved(e);

        if (e.Control.GetType() == typeof(Button))
        {
            e.Control.MouseEnter -= button_MouseEnter;
            e.Control.MouseLeave -= button_MouseLeave;
        }
    }

    private void button_MouseEnter(object sender, EventArgs e) {
        var c = (Button)sender;
        c.UseVisualStyleBackColor = false;
        c.BackColor = Color.GhostWhite;
    }

    private void button_MouseLeave(object sender, EventArgs e) {
        var c = (Button)sender;
        c.UseVisualStyleBackColor = true;
    }
}

次に、 の代わりにこのクラスから継承しFormます。

于 2012-10-26T16:27:30.087 に答える
0

これは、フォームに追加された新しいボタンに自動的に適用されるわけではありませんが、あなたが本当にやりたいことだと思うので、既存のすべてのボタンに適用されます。

partial class MyForm
{
    foreach(var b in this.Controls.OfType<Button>())
    {
        b.MouseEnter += button1_MouseEnter;
        b.MouseLeave += button1_MouseLeave;
    }
}

sender次のように、直接使用するのではなく、使用するようにイベント ハンドラーを変更する必要があることに注意してくださいbutton1

private void button1_MouseEnter(object sender, EventArgs e) {
    var c = (Button)sender;
    c.UseVisualStyleBackColor = false;
    c.BackColor = Color.GhostWhite;
}

private void button1_MouseLeave(object sender, EventArgs e) {
    var c = (Button)sender;
    c.UseVisualStyleBackColor = true;
}
于 2012-10-26T16:22:15.553 に答える