Почему последующие методы для painteventhandler иногда не работают?
Я только начинаю работать над некоторыми графическими формами, скопировал несколько примеров и смог заставить их работать.
PaintEventHandler работает нормально. У меня есть методы, вызванные из PaintEventHandler, которые будут рисовать одну из двух графиков. Они прекрасно работают. Они закомментированы в следующем коде.
Я задаюсь вопросом, почему эти же вызовы методов, основанные на статусе флажка, не работают. Я ожидаю, что смогу установить флажок и изменить размер окна, и если флажок установлен, то будет нарисована соответствующая графика. Если флажок не установлен, то рисунок не будет нарисован.
Я предполагаю, что здесь у меня есть концептуальная ошибка. Может быть, графика просто останется там в застое?
public Form1() { InitializeComponent(); // chkBxOutlinedSquare.CheckState = CheckState.Checked; this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs pe) { // Declares the Graphics object and sets it to the Graphics object // supplied in the PaintEventArgs. Graphics g = pe.Graphics; //outlinedSquare(g); //someGraphic(g); // Insert code to paint the form here. if (chkBxOutlinedSquare.CheckState == CheckState.Checked) { outlinedSquare(g); } if (chkBxSomeGraphics.Checked) { someGraphic(g); } } private void someGraphic(Graphics g) { LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 255, 0, 0), // Opaque red Color.FromArgb(255, 0, 0, 255)); // Opaque blue Pen pen = new Pen(linGrBrush); g.DrawLine(pen, 0, 10, 200, 10); g.FillEllipse(linGrBrush, 0, 30, 200, 100); g.FillRectangle(linGrBrush, 0, 155, 500, 30); } private void outlinedSquare(Graphics g) { // Create a new pen. Pen skyBluePen = new Pen(Brushes.DeepSkyBlue); // Set the pen's width. skyBluePen.Width = 8.0F; // Set the LineJoin property. skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel; // Draw a rectangle. g.DrawRectangle(skyBluePen, new Rectangle(40, 40, 150, 200)); //Dispose of the pen. skyBluePen.Dispose(); }
Что я уже пробовал:
Я поставил точки останова в обоих методах, и код определенно работает в нужное время. Это просто не очищает графику, когда флажки сняты.