【问题标题】:How do I change Brush color randomly using a timer?如何使用计时器随机更改画笔颜色?
【发布时间】:2019-06-04 11:43:53
【问题描述】:

我的 winform 中有一个椭圆,我试图随机更改其填充属性,即我希望椭圆的颜色不断变化。

SolidBrush colour;

 private void drawBorder()
    {
        Pen bPen = new Pen(Color.Black, 8);
        colour = new SolidBrush(Color.Yellow);

        g.DrawEllipse(bPen, 412, 269, 19, 19);
        g.FillEllipse(colour, 412, 269, 19, 19);

        timer1.Enabled = true;
        timer1.Start();
    }


private void timer1_Tick(object sender, EventArgs e)
    {
        //g.FillEllipse(colour, 412, 269, 19, 19);

        if (this.colour.Color == Color.Yellow)
        {
            //MessageBox.Show("!", Color.Yellow.ToString());
            this.colour.Color = Color.Pink;
        }
        if (this.colour.Color == Color.Pink)
        {
            //MessageBox.Show("#", this.colour.Color.ToString());
            this.colour.Color = Color.Yellow;
        }
    }

【问题讨论】:

标签: c# .net winforms gdi+


【解决方案1】:

在表单级别声明 Random 类并使用 Color.FromArgb 函数来创建您的颜色:

private Color colour = Color.Black;
private Random rnd = new Random();

private void timer1_Tick(object sender, EventArgs e) {
  colour = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
  this.Invalidate();
}

protected override void OnPaint(PaintEventArgs e) {      
  base.OnPaint(e);

  e.Graphics.Clear(Color.White);
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
  using (SolidBrush br = new SolidBrush(colour)) {
    e.Graphics.FillEllipse(br, new Rectangle(16, 16, 64, 64));
  }
}

【讨论】:

  • 您可能只想使包围椭圆的矩形(而不是整个表单)无效。那样你会得到更少的闪烁
  • @Flydog57 只是 DoubleBuffer 表单。从问题中不清楚 Ellipse 是形状还是绘图,但它们包含标签 GDI+,所以我假设是绘图。
  • 我收到一条错误消息“无法将 System.Drawing.SolidBrush 转换为 System.Drawing.Color。”
  • @AdithiChakravarthy 我发布的代码不会产生该错误。使用您正在使用的代码编辑您的问题。
  • @LarsTech 我已经编辑了我的代码。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多