其他事件中改变颜色,然后调用窗体的Invalidate接口,在Onpaint中使用这个颜色画图
load事件可以画图,不过如果不在paint中画图的话,你就算画出来也看不到(被刷新掉了)

解决方案 »

  1.   

    谢谢楼上回复,请问“其他事件中改变颜色,然后调用窗体的Invalidate接口,在Onpaint中使用这个颜色画图”是什么意思啊,能说得详细点吗,谢谢了
      

  2.   

    override onpaint方法, 写画东西的逻辑。然后在需要重画的时候, 调用Invalidate方法, 就自动重画了。
      

  3.   

    Color redColor = Color.Red
      

  4.   

    我在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事件中判断这个园,如果其颜色是红色,就变成绿色;如果其颜色是绿色,就变成红色,该怎么实现呢,请各位高手指点啊,谢谢了
           
          
      

  5.   

    // 当前圆的颜色
    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
    }
      

  6.   

    楼主这种情况
    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();
            }    }