值总是返回null

本文关键字:null 返回 | 更新日期: 2023-09-27 18:28:34

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

我有一个winform,我用它作为我的控制面板。从这里开始,我可以用鼠标定义区域,拍摄桌面的屏幕截图。很像剪切工具在窗口中的工作方式。

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

现在,我想要的是在我的控制面板上有一个图片框来显示这张拍摄的图像。就像狙击工具的工作原理一样。然而,我为将此图像从screen-shot类传递到控制面板而编写的代码抱怨事件处理程序总是返回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;
    }

我花了几个小时在这上面,但我不明白为什么图像不会显示在我的控制面板上的图像框中。有谁能帮我摆脱困境吗?为什么我拍摄的屏幕截图没有显示在控制面板上的图片框中?

值总是返回null

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

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

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