2009-11-30 3 views
0

몇 시간 전에 유사하지만 다소 구체적인 질문을 게시했지만 상황이 변경되었습니다. 나는 그래픽을 변형시키는 프로그램에 대해 작업하고 있으며, 폼의 왼쪽 상단에있는 패널에 프레젠테이션을 제공합니다. 이전 버전에서는 괜찮 았지만 지금은 실행 취소 할 수없고 이전 버전을로드 할 수 없습니다. 예전에는이 앱이 메뉴의 이벤트뿐 아니라 그림에도 응답하지 않았습니다. 새 프로젝트를 시작하고 실행하여 메뉴가 작동하고 버튼과 물건을 가져 왔습니다. 그러나 여전히 패널에 축과 눈금 선을 그려지지는 않습니다. 주 폼의 페인트 처리기와 작업을 수행해야하는 splitContainer2_Panel1_Paint 처리기 모두에 중단 점을 넣었지만 여기의 코드는 실행되지 않습니다. 나는 활성 상태이고 매 100ms마다 전체 양식을 무효화하는 타이머가 있는데, 왜 페인트 이벤트 핸들러는 호출되지 않습니까? 도움?C#/Windows Forms : 양식의 페인트 코드가 실행되지 않고 있습니다.

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

실제로 Transformer_Paint 및 splitContainer2_Panel1_Paint 루틴을 이벤트에 연결 했습니까? – MartW

답변

0

으악, 그것은 고정, 나는 ... 난 그냥 내 옛날 unworking 버전의 핸들러 코드에 붙여 디자이너에서 이벤트 처리기를 추가하는 데 필요한, 그래서 디자이너에 필요한 코드를 추가하지 않았다 암호. 아직도 작동이 멈춘 이유는 알 수 없지만 적어도 지금은 작동 중입니다.

관련 문제