0

数時間前に似たような具体的ではない質問を投稿しましたが、状況が変わりました。グラフィックを変換し、フォームの左上にあるパネルに表示するプログラムに取り組んでいます。以前は問題なくペイントできていましたが、現在はそうではなく、元に戻したり、古いバージョンをロードしたりすることもできません。以前は、アプリはメニューのイベントやペイントにも反応しませんでした。私は新しいプロジェクトを開始し、それを起動して実行しました。メニューが機能し、ボタンなどを持ち込みました。ただし、パネルの軸とグリッド線はまだ描画されません。メイン フォームのペイント ハンドラーと作業を行う必要がある splitContainer2_Panel1_Paint ハンドラーの両方にブレークポイントを配置しましたが、ここのコードは実行されていません。100ミリ秒ごとにアクティブでフォーム全体を無効にするタイマーがあります。では、なぜペイント イベント ハンドラが呼び出されないのでしょうか。ヘルプ?

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();
    }
}
}
4

1 に答える 1

0

おっと、修正しました。デザイナーからイベント ハンドラーを追加する必要がありました...動作していない古いバージョンのハンドラー コードを貼り付けただけなので、必要なコードがデザイナー コードに追加されませんでした。以前に機能しなくなった理由はまだわかりませんが、少なくとも現在は動作しています。

于 2009-11-30T08:23:24.713 に答える