值始终返回null

时间:2013-08-22 14:34:52

标签: c# winforms event-handling screenshot

首先,我会解释我的节目。

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

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

现在,从这里我想要的是我控制面板中的一个图片框来显示这个拍摄的图像。完全像剪切工具的工作原理。但是,我写的代码从屏幕截图类传递给控制面板的代码抱怨事件处理程序始终返回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;
    }

我花了好几个小时,但我无法理解为什么图像不会显示在我的ControlPanel上的图像框中。任何有新鲜眼睛的人都可以帮助我吗?为什么我拍摄的屏幕截图图像没有显示在我的ControlPanel上的图片框中?

1 个答案:

答案 0 :(得分:3)

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

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

这是ScreenCapture新实例。它没有附加任何事件处理程序(这就是为null看到OnUpdateStatus的值的原因。如果你想使用你在{{{ 1}} class,你要将它传递给你的ControlPanel(例如在构造函数中)。