2

私は2つの可動式ピクチャーボックスを持っており、ユーザーは画像を動かして好きなように揃えることができます

ピクチャーボックスAをピクチャーボックスBの上にドラッグすると、Aの画像の末尾部分がBに表示されます。これはすぐに消えます。これは、解像度の悪い非常に古いWindowsで見られるものと同じです。

その特徴は、静的な画像ボックス内にのみ表示され、その下の空きスペースには表示されないことです。運が悪かったので、サスペンドレイアウトとレジュームレイアウトをいじっていました。助言がありますか?また、コントロールの種類をPictureboxから別のものに変更することもできます。

public void OnMouseMove(object sender, MouseEventArgs mouseEventArgs)
    {
        var control = sender as Control;

        control.SuspendLayout();

        Point pt = new Point(mouseEventArgs.X, mouseEventArgs.Y);

        control.Left += pt.X - _startDraggingPoint.X;
        control.Top += pt.Y - _startDraggingPoint.Y;


        control.ResumeLayout();
    }
4

3 に答える 3

2

これは、Winforms では避けられない問題です。複数のコントロールを使用しているために発生し、コントロールが画面にレンダリングされる方法が原因で表示されます。一つずつ。ダブル バッファリングは問題を解決しません。個々のコントロールのレンダリングにのみ適用され、PictureBox は既にダブル バッファリングされています。実際、ダブルバッファリングは無料ではなく、ペイントルーチンを遅らせるため、問題を悪化させます。

これが表示される最大の理由は、PictureBox コントロールによる画像の描画が遅いためです。これは、画像をスケーリングするように要求し、大きな画像から見栄えの良い小さな画像をレンダリングすることを期待するときに発生します。この再スケーリングには特に画像が大きい場合に時間がかかり、コントロールが描画されるたびに行われます。コントロールがそれを行う必要がないように、自分で画像を事前にスケーリングすることで修正します。

本当の解決策は、PictureBox コントロールをまったく使用せず、単にフォームに画像を描画させることです。ダブルバッファリングが問題を解決します。もちろん、PB が実行する組み込みのスケーリングや無料で入手できるヒット テストなど、多くの利便性が失われます。実際に実装するのはそれほど難しくありません。

Windows には、コードを改善するための作業をしなくても問題を解決できる可能性のある魔​​法の呪文があります。すべての子コントロールと共にウィンドウをダブル バッファリングするように要求できます。すべてがオフスクリーン バッファにレンダリングされ、結果がスクリーンにブリットされます。このコードをフォームに貼り付けます。

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
    }
}

これにより、ペイント アーティファクトが発生する可能性があります。有害すぎる場合は、代わりにコードを改善する必要があります。

于 2013-01-11T16:30:46.100 に答える
0

コントロールの "DoubleBuffered" プロパティを true に設定します。これにより、ちらつきを減らすことができます。

参照: http://msdn.microsoft.com/de-de/library/system.windows.forms.control.doublebuffered(v=vs.80).aspx

于 2013-01-11T15:27:58.360 に答える
0

結局、私は別の解決策に行きました。イメージ コントロールを保持するために、DevExpress のドキュメント マネージャを使用しました。少し手間がかかりましたが、うまく機能し、結果はスムーズです。

于 2013-01-21T18:54:42.073 に答える