C# 值始终返回null

C# 值始终返回null,c#,winforms,event-handling,screenshot,C#,Winforms,Event Handling,Screenshot,首先,我来解释一下我的计划 我有一个winform用作我的控制面板。从这里,我可以使用鼠标来定义区域,对我的桌面进行屏幕截图。很像剪贴工具在窗口中的工作方式 屏幕快照是使用我的屏幕快照类生成的,该类由另一个名为Form1的表单运行。第二个表单中没有其他代码,只是用于生成屏幕快照将使用的矩形。从这里,拍摄的屏幕截图存储在剪辑板中,并传递回我的屏幕截图类 现在,我想要的是控制面板中的一个图片框来显示这张拍摄的照片。就像剪断工具的工作原理一样。但是,我编写的代码将这个图像从screen shot类传递

首先,我来解释一下我的计划

我有一个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;
    }

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

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


这是
屏幕截图的一个新实例。它没有附加任何事件处理程序(这就是为什么您看到
OnUpdateStatus
的值为
null
。如果您想使用在
ControlPanel
类中创建的实例,您需要将其传递给
表单1
(例如在构造函数中).

请具体一点,只发布相关代码。
我在这上面花了几个小时
我们不想在这上面花几个小时,请仅发布相关或可疑代码即使我正在将图像存储在剪贴板中?很抱歉,但我不知道如何执行您的建议。@N0xus:图像的存储与此无关。您正在查看f
OnUpdateStatus
CaptureImage
方法中,对吗?因此,调用该方法的是哪个而不是
screenscapture
。我怀疑您需要将
\u screenscap
传递给
Form1
的构造函数(需要将其存储在字段中)这样,当调用
Form1
中的
CaptureImage
时,可以使用相同的实例。
ScreenCapture capture = new ScreenCapture();
capture.CaptureImage(...);