0

初心者のコーダーが C# を始めています.. 描画を伴うプログラムを作成しています。基本的に、マウスを動かして描画するたびに、画像上の実際の線が遅れて表示されます..本来よりもまっすぐです. 以前は問題なく動作していましたが、ある時点で何かがうまくいかなかったと思います.そのとき何をしたか思い出せないので、たどることが難しい..新しいソリューションでプログラムの描画部分だけを複製しようとしました.それはうまくいくようです..

言いたいことがわかるように .exe ファイルを投稿しますが、ここに実行可能ファイルを投稿することが許可されているかどうかはわかりません。

編集:コードが正常に動作することを確認しました。コードの例については、sa_ddam213 による回答を参照してください。他の人のコンピューターでは問題なく動作するように見えるので、完全に混乱しています。

4

3 に答える 3

1

マウス移動イベントごとに新しい Graphic オブジェクトと Pen オブジェクトを作成しています。これは、Mouse_Downイベントで一度これらの変数を作成するよりもはるかに遅くなります。

このようなものは少し速いかもしれません。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        b = new Bitmap(this.Width, this.Height);
    }

    private Graphics _graphics;
    private Pen _pen;
    private int pX = 0;
    private int pY = 0;
    private bool paint = false;
    private Bitmap b;

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        pX = e.X;
        pY = e.Y;
        _graphics = Graphics.FromImage(b);
        _pen= new Pen(Color.Black, 3);
        paint = true;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (paint)
        {
            _graphics.DrawLine(_pen, pX, pY, e.X, e.Y);
            pictureBox1.BackgroundImage = b;
            pictureBox1.Refresh();
            pX = e.X;
            pY = e.Y;
        }
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        paint = false;
        _graphics.Dispose();
        _pen.Dispose();
    }
}
于 2013-02-12T20:24:36.240 に答える
0

VGA に問題がある可能性があります。別のPCで確認してお知らせください

于 2013-02-13T11:10:42.467 に答える
0

pictureBox1.Invalidate() の代わりに、pictureBox1.Refresh() を使用してみてください

pictureBox1.BackgroundImage = bの後に移動する必要がある場合もあります

また、MouseDown ではthis.Capture = true を設定する必要があり、MouseUpでは this.Capture = falseを設定する必要があります。これを行わず、マウス カーソルが別のアプリケーション上にあるときにマウス ボタンを離すと、MouseUp メッセージを受け取ることはありません。

于 2013-02-12T20:06:03.010 に答える