2009-11-30 10 views
0

J'ai posté une question similaire mais moins spécifique il y a quelques heures, mais les circonstances ont changé. Je travaille sur un programme qui transforme les graphiques, en les présentant dans un panneau en haut à gauche du formulaire. Il peignait bien plus tôt, mais maintenant ne l'est pas et je ne peux pas défaire, charger l'ancienne version, etc. Auparavant, l'application ne répondait même pas aux événements dans les menus, ainsi que la peinture. J'ai commencé un nouveau projet et je l'ai mis en marche, les menus fonctionnent et j'ai apporté les boutons et autres choses. Mais il ne peint toujours pas les axes et le quadrillage du panneau. J'ai mis des points d'arrêt dans le gestionnaire de peinture des formulaires principaux et dans le gestionnaire splitContainer2_Panel1_Paint qui devrait faire le travail, mais le code ici n'est même pas exécuté. J'ai une minuterie qui est active et invalide le formulaire entier toutes les 100 ms, alors pourquoi le gestionnaire d'événements paint ne serait-il pas appelé? Aidez-moi?C#/Windows Forms: le code de peinture du formulaire n'est pas exécuté

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 

namespace TransformerA 
{ 
public partial class Transformer : Form 
{ 
    /* Initialize parameters */ 
    private bool drawAxes = true; 
    private bool drawGrid = true; 

    private List<ObjectSettings> dispObjects = new List<ObjectSettings>(); 


    /* Initialize form */ 

    public Transformer() 
    { 
     InitializeComponent(); 
    } 

    private void Transformer_Load(object sender, EventArgs e) 
    { 
     // Populate available objects listbox 
     string currentDir = Directory.GetCurrentDirectory(); 
     string[] fileEntries = Directory.GetFiles(currentDir + @"\Objects"); 
     foreach (string s in fileEntries) { 
      int start = s.LastIndexOf(@"\"); 
      int end = s.LastIndexOf(@"."); 
      availObjectsListBox.Items.Add(s.Substring(start + 1, end - start - 1)); 
     } // end foreach 
    } 



    /* Paint graphics */ 

    // Paint main form 
    private void Transformer_Paint(object sender, PaintEventArgs e) 
    { 
     splitContainer2_Panel1_Paint(sender, e); 
    } 

    // Paint graphics panel 
    private void splitContainer2_Panel1_Paint(object sender, PaintEventArgs e) 
    { 
     Rectangle r = splitContainer2.Panel1.ClientRectangle; 
     //Graphics g = splitContainer2.Panel1.CreateGraphics(); 
     Graphics g = e.Graphics; 
     Pen axisPen = new Pen(Color.Gray, 2.0f); 
     Pen gridPen = new Pen(Color.Gray, 1.0f); 

     g.Clear(Color.Blue); 

     if (drawAxes) { 
      g.DrawLine(axisPen, r.Left + 0.5f * r.Width, r.Top, r.Left + 0.5f * r.Width, r.Bottom); 
      g.DrawLine(axisPen, r.Left, r.Top + 0.5f * r.Height, r.Right, r.Top + 0.5f * r.Height); 
     } 

     if (drawGrid) { 
      // Vertical lines 
      int xVal = 0; 
      int xCenter = r.Width/2; 
      g.DrawLine(gridPen, xCenter, r.Top, xCenter, r.Bottom); 
      for (int i = 0; i < 10; i++) { 
       xVal += r.Width/20; 
       g.DrawLine(gridPen, xCenter + xVal, r.Top, xCenter + xVal, r.Bottom); 
       g.DrawLine(gridPen, xCenter - xVal, r.Top, xCenter - xVal, r.Bottom); 
      } 

      // Horizontal lines 
      int yVal = 0; 
      int yCenter = r.Height/2; 
      g.DrawLine(gridPen, r.Left, yCenter, r.Right, yCenter); 
      for (int i = 0; i < 10; i++) { 
       yVal += r.Height/20; 
       g.DrawLine(gridPen, r.Left, yCenter + yVal, r.Right, yCenter + yVal); 
       g.DrawLine(gridPen, r.Left, yCenter - yVal, r.Right, yCenter - yVal); 
      } 
     } 



     // foreach object in displayed objects 
     // keep list of displayed objects and their settings (make struct) 


     g.Dispose(); 
     axisPen.Dispose(); 
     gridPen.Dispose(); 
    } 


    /* File menu */ 

    private void saveImageToolStripMenuItem_Click(object sender, EventArgs e) 
    { 

    } 

    private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 


    /* Options menu */ 

    private void axesOnoffToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (drawAxes == true) 
      drawAxes = false; 
     else 
      drawAxes = true; 
    } 

    private void gridOnoffToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (drawGrid == true) 
      drawGrid = false; 
     else 
      drawGrid = true; 
    } 


    /* Help menu */ 

    private void helpToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     AboutBox dlg = new AboutBox(); 
     dlg.ShowDialog(); 
    } 


    /* Other */ 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     Invalidate(); 
    } 
} 
} 
+0

Avez-vous réellement connecté vos routines Transformer_Paint et splitContainer2_Panel1_Paint à leurs événements? – MartW

Répondre

0

Whoops, fixe, je besoin d'ajouter le gestionnaire d'événements du concepteur ... je viens collé dans le code du gestionnaire de mon ancienne version désoeuvrement, donc il n'a pas ajouter le code nécessaire au concepteur code. Je n'arrive toujours pas à comprendre pourquoi il a cessé de fonctionner avant mais au moins il fonctionne maintenant.