Note that there are some explanatory texts on larger screens.

plurals
  1. POHorrible Flickering drawing in C#
    primarykey
    data
    text
    <p>Anyone have any suggestions on how to stop this drawing from flickering? I have tried each double buffering solution, stopped using .CreateGraphics, moved all of my functions all over the place, nothing has worked. </p> <pre><code>using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace Math { public partial class Form1 : Form { static Random rand = new Random(); ProblemBox[] problems = new ProblemBox[20]; #region Types public enum Type { Basic, Algebric, Triginomic } public class Problem { public Type type; public String problem, answer; public Boolean isTrue; public Problem(Type type, String problem, String answer, Boolean isTrue) { this.type = type; this.problem = problem; this.answer = answer; this.isTrue = isTrue; } } class ProblemBox { public Rectangle rect; public Problem problem; public ProblemBox(Problem problem) { rect = new Rectangle(0, 309, 244, 30); this.problem = problem; } public void move() { rect.Y -= 1; } public void draw(Graphics g) { g.FillRectangle(Brushes.DarkGray, rect); g.DrawString(problem.problem + "=" + problem.answer, new Font("Times New Roman", 12.0f), Brushes.DarkBlue, new PointF(rect.X + 5, rect.Y + 5)); } } #endregion public Problem CreateProblem() { char op = '+'; int a = rand.Next(20), b = rand.Next(20), c; switch (rand.Next(4)) { case 2: c = a - b; op = '-'; break; case 3: c = a * b; op = '*'; break; case 4: c = a / b; op = '/'; break; default: c = a + b; op = '+'; break; } bool isTrue = rand.Next(2) == 1; if (!isTrue) { c += 1 + (10 - rand.Next(20)); } return new Problem(Type.Basic, String.Concat(a + ""+op +""+ b), String.Concat(c), isTrue); } public Form1() { InitializeComponent(); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); problems[0] = new ProblemBox(CreateProblem()); } private void panel1_Paint(object sender, PaintEventArgs e)//Tick { ProblemBox temp = null; if (problems[0].rect.Y &lt; 279) { temp = new ProblemBox(CreateProblem()); } for (int i = 0; i &lt; 20; i++) { if (temp != null) { ProblemBox temp2 = problems[i]; problems[i] = temp; temp = temp2; } if (problems[i] != null) { problems[i].move(); problems[i].draw(e.Graphics); } } Thread.Sleep(20); DrawingPanel.Invalidate(); } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload