1

Windowsフォームアプリケーションでオブジェクトにグラデーションスタイルを適用するいくつかの方法に出くわしました。すべてのメソッドには、OnPaintメソッドのオーバーライドが含まれます。ただし、検証に基づいて実行時にスタイルを変更することを検討しています。

すでにレンダリングされているボタンに新しいグラデーションスタイルを適用するにはどうすればよいですか(BackColorでできるように)?

R、C。

更新:これは私が現在使用しているコードです。効果がないようです

private void Button_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawString("This is a diagonal line drawn on the control",
            new Font("Arial", 10), System.Drawing.Brushes.Blue, new Point(30, 30));
        g.DrawLine(System.Drawing.Pens.Red, btn.Left, btn.Top,
            btn.Right, btn.Bottom);

        this.btn.Invalidate();
    }

によって呼ばれている

btn.Paint += new PaintEventHandler(this.Button_Paint);

現在のコードでさらに更新

private void Button_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawString("This is a diagonal line drawn on the control",
        new Font("Arial", 10), System.Drawing.Brushes.Blue, new Point(30, 30));
g.DrawLine(System.Drawing.Pens.Red, btn.Left, btn.Top,
        btn.Right, btn.Bottom);
}

private void btn_Click(object sender, EventArgs e)
{
btn.Paint += new PaintEventHandler(this.Button_Paint);();
btn.Invalidate();
}
4

2 に答える 2

3

これには2つの部分があります。Paint1つは、SLaksが言ったように、イベントハンドラーでグラデーションを描画する必要があります。これは次のようになります(ここでの私の例は簡潔にするために少し厄介です):

private void Button_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    if (MyFormIsValid()) {
        g.DrawString("This is a diagonal line drawn on the control",
            new Font("Arial", 10), System.Drawing.Brushes.Blue, new Point(30, 30));
        g.DrawLine(System.Drawing.Pens.Red, btn.Left, btn.Top,
            btn.Right, btn.Bottom);
    }
    else {
        g.FillRectangle(
            new LinearGradientBrush(PointF.Empty, new PointF(0, btn.Height), Color.White, Color.Red),
            new RectangleF(PointF.Empty, btn.Size));
    }
}

また、検証を行い、ボタンがクリックされたときにボタンを再描画する必要があります。

btn.Click += Button_Click;

..。

private void Button_Click(object sender, EventArgs e)
{
    DoValidations();
    btn.Invalidate();
}

もちろん、DoValidations()andMyFormIsValid()メソッドを実装する必要があります。

実行可能なサンプルプログラムとしての全体は次のとおりです。http://pastebin.com/cfXvtVwT

于 2012-07-05T13:52:16.947 に答える
2

Paintこれまで見てきたように、イベントを処理する必要があります。

クラスにブール値を設定して、グラデーションを描画するかどうかを指定できます。

于 2012-07-05T11:28:35.097 に答える