2

pictureBox の onPaint イベント ハンドラで問題が発生しています。コードを簡略化したので、今これを達成しようとしています: パスからビットマップを pictureBox1 にロードし、pictureBox1 の上を移動するときにマウス カーソルの周りに小さな四角形を描画します。

    private int mouseX;
    private int mouseY;
    private String path;

    public Form1()
    {
        InitializeComponent();
        path = "images\\image.jpg";
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        pictureBox1.Image = new Bitmap(path);
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        mouseX = e.X;
        mouseY = e.Y;
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawRectangle(Pens.Black, mouseX - 10, mouseY - 10, 20, 20);
        pictureBox1.Invalidate();
    }

アプリケーションを実行すると、ビットマップが正常に読み込まれ、マウスをドラッグした場所に四角形が適切に描画されます。とにかく、次の 2 つの問題があります。

1)フォームが読み込まれると、ウィンドウをどこかに移動するまで、すべてが白ですが、pictureBox です。これは、menuStrip、toolStrip などを白色でクリアすることを意味します。pictureBox.Invalidate(); を追加すると Form1_Load にその問題を処理しているように見えます (すべてが読み込まれて表示されます) が、toolStrip には、相互作用しているいくつかのボタンとコンボ ボックスがあり、その可視性を変更しているため、依然として問題が発生します。pictureBox のみの Paint の機能を減らしたいと思います。

2) マウス カーソルが pictureBox に入らなかったにもかかわらず、フォームが読み込まれた瞬間に四角形が描画されます。また、カーソルが pictureBox を離れると、最後に描画された長方形がそこに残ります。削除しようとしましたが、わかりませんでした。

提案をありがとう、何か基本的なものがそこに欠けているように思えますが、何がわかりません。

4

1 に答える 1

0

2)MouseMoveカーソルが画像ボックスの上にある場合にのみ機能します。四角形の描画をいつ開始し、いつ終了するかを処理するためにMouseEnterandを使用してみてください。MouseLeave

于 2013-02-20T11:58:09.480 に答える