1

まず、私のプログラムについて説明します。

コントロールパネルとして使用する1つのwinformがあります。ここから、マウスを使用してデスクトップのスクリーン ショットを撮り、領域を定義することができます。切り取りツールがウィンドウ内でどのように機能するかによく似ています。

スクリーン ショットは、Form1 という別のフォームによって実行されるスクリーン ショット クラスを使用して生成されます。この 2 番目のフォームには他のコードはありませんが、単にスクリーン ショットで使用する四角形を生成するために使用されます。ここから、取得したスクリーン ショットがクリップ ボードに保存され、スクリーンショット クラスに戻されます。

さて、ここから私が欲しいのは、この撮影した画像を表示するためのコントロール パネルの画像ボックスです。スニッピングツールの仕組みとまったく同じです。ただし、この画像をスクリーン ショット クラスからコントロール パネルに渡すために作成したコードは、イベント ハンドラーが常に null を返すと不平を言っています。

このために私が書いたコードは次のとおりです。

 Image img = (Image)bitmap;
 if (OnUpdateStatus == null) return;

 ProgressEventArgs args = new ProgressEventArgs(img);
 OnUpdateStatus(this, args);

if ステートメントをコメントアウトしようとしましたが、OnUpdateStatus の処理で、それが存在しないという例外がスローされます。

今、私のコントロールパネルフォームで、その画像を取得して次のコードで表示しようとしています:

    private ScreenCapture _screenCap;

    public ControlPanel()
    {
        InitializeComponent();
        _screenCap = new ScreenCapture();
        _screenCap.OnUpdateStatus += _screen_CapOnUpdateStatus;

    }



    private void _screen_CapOnUpdateStatus(object sender, ProgressEventArgs e)
    {

        imagePreview.Image = e.CapturedImage;
    }

これに何時間も費やしましたが、コントロール パネルの画像ボックスに画像が表示されない理由がわかりません。新鮮な目のセットを持っている人は私を助けることができますか? コントロール パネルに保持されているピクチャ ボックスに、取得したスクリーン ショット イメージが表示されないのはなぜですか?

4

1 に答える 1

3

これが問題だと思います (ざっと目を通しておかなければならないコードがたくさんあります - 短いが完全な例の方が良いでしょう):

ScreenCapture capture = new ScreenCapture();
capture.CaptureImage(...);

新しいインスタンスですScreenCapture。イベント ハンドラーがアタッチされていません (そのため、 nullforの値が表示されます。クラスでOnUpdateStatus作成したインスタンスを使用する場合は、それを(たとえば、コンストラクターで)。ControlPanelForm1

于 2013-08-22T14:37:52.507 に答える