.net画圆问题(新手请教)
在form-paint事件中利用g.DrawEllipse可以实现画圆的效果,现在遇到的问题的,我想在另外几个事件中改变这个圆的背景颜色,该怎么操作这个圆呢,请大家指点,谢谢了另外我在窗体load事件中能实现画圆不? --------------------编程问答-------------------- 其他事件中改变颜色,然后调用窗体的Invalidate接口,在Onpaint中使用这个颜色画图
load事件可以画图,不过如果不在paint中画图的话,你就算画出来也看不到(被刷新掉了) --------------------编程问答-------------------- 谢谢楼上回复,请问“其他事件中改变颜色,然后调用窗体的Invalidate接口,在Onpaint中使用这个颜色画图”是什么意思啊,能说得详细点吗,谢谢了
--------------------编程问答-------------------- override onpaint方法, 写画东西的逻辑。
然后在需要重画的时候, 调用Invalidate方法, 就自动重画了。 --------------------编程问答-------------------- 谢谢楼上,请问能给个例子看看吗,谢谢了 --------------------编程问答-------------------- Color redColor = Color.Red --------------------编程问答-------------------- 我在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事件中判断这个园,如果其颜色是红色,就变成绿色;如果其颜色是绿色,就变成红色,该怎么实现呢,请各位高手指点啊,谢谢了
--------------------编程问答--------------------
// 当前圆的颜色
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();
}
}
补充:.NET技术 , C#