我在Form1_Paint事件中写了如下代码,画了一个红色实心圆: Dim tbrush As New Drawing.SolidBrush(Color.Red) Dim j As Integer = 0 Dim g As Graphics g = Me.CreateGraphics g.FillEllipse(tbrush, 0, 0, 20, 20)我想在button1_click事件中判断这个园,如果其颜色是红色,就变成绿色;如果其颜色是绿色,就变成红色,该怎么实现呢,请各位高手指点啊,谢谢了
Dim tbrush As New Drawing.SolidBrush(Color.Red)
Dim j As Integer = 0
Dim g As Graphics
g = Me.CreateGraphics
g.FillEllipse(tbrush, 0, 0, 20, 20)我想在button1_click事件中判断这个园,如果其颜色是红色,就变成绿色;如果其颜色是绿色,就变成红色,该怎么实现呢,请各位高手指点啊,谢谢了
Color currentColor;Paint()
{
...
Drawing.SolidBrush(currentColor)
...
}button1_Click()
{
if(currentColor == Color.Red)
{
currentColor = Color.Green;
}
if(currentColor == Color.Green)
{
currentColor = Color.Red;
}
this.Refresh(); // this 代表你在上面画圆的控件,比如:form
}
1 load事件肯定可以绘画,但是无法显示,建议Onpaint里面画
2 你需要反复改变圆点颜色,必须重绘
建议你实际应用过重载一个圆型label或者button,通过属性改变颜色最方便代码:
public partial class EllipseButton : System.Windows.Forms.Button
{
private Color startColor = Color.Blue; private Color endColor = Color.GreenYellow; [Description("设定渐变的起始色"), Category("Appearance")]//注视 public Color StartColor
{
get
{
return startColor;
}
set
{
startColor = value; RePaint();
}
}
[Description("设定渐变的终止色"), Category("Appearance")]
public Color EndColor
{
get
{
return endColor;
}
set
{
endColor = value;
RePaint();
} }
public EllipseButton()
{
InitializeComponent(); this.Width = 25; this.Height = 25;
}
//绘制圆形区域
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe); Graphics g = pe.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias; g.Clear(this.BackColor); Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); LinearGradientBrush myBrush = new LinearGradientBrush(rect, startColor, endColor, LinearGradientMode.ForwardDiagonal); g.FillEllipse(myBrush, rect); myBrush.Dispose(); StringFormat format = new StringFormat(); format.LineAlignment = StringAlignment.Center; format.Alignment = StringAlignment.Center; g.DrawString(this.Text, Font, new SolidBrush(this.ForeColor), rect, format);
}
//重新绘制圆形区域
private void RePaint()
{
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); OnPaint(new PaintEventArgs(this.CreateGraphics(), rect));
}
private void EllipseButton_Resize(object sender, System.EventArgs e)
{
RePaint();
}
private void EllipseButton_TextChanged(object sender, System.EventArgs e)
{
RePaint();
} }