1

首先,我将解释我的程序。

我有一个用作控制面板的 winform。从这里我可以使用鼠标对我的桌面进行屏幕截图来定义该区域。就像截图工具在 Windows 中的工作方式一样。

屏幕截图是使用我的屏幕截图类生成的,该类由另一个名为 Form1 的表单运行。第二种形式没有其他代码,只是用于生成屏幕截图将使用的矩形。从这里开始,拍摄的屏幕截图存储在剪贴板中并传回我的截图类。

现在,从这里我想要的是在我的控制面板中显示这个拍摄的图像的图片框。就像截图工具的工作原理一样。但是,我编写的用于将此图像从屏幕截图类传递到控制面板的代码抱怨事件处理程序始终返回为空。

我为此编写的代码如下:

 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;
    }

我已经为此花费了数小时,但我无法弄清楚为什么图像不会显示在我的 ControlPanel 上的图像框中。有眼光的人能帮帮我吗?为什么我拍摄的屏幕截图图像没有显示在控制面板上的图片框中?

4

1 回答 1

3

我认为这就是问题所在(有很多代码需要浏览——一个简短但完整的例子会更好):

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

这是一个新的实例ScreenCapture它没有附加任何事件处理程序(这就是为什么您会看到 for 的值nullOnUpdateStatus如果您想使用您在ControlPanel类中创建的实例,您需要将其传递给您的Form1(例如在构造函数中)。

于 2013-08-22T14:37:52.507 回答