C# 将存储的对象实例传递给另一个窗体

C# 将存储的对象实例传递给另一个窗体,c#,winforms,event-handling,screenshot,C#,Winforms,Event Handling,Screenshot,我正试图将我的屏幕截图显示在控制面板窗体上的图片框中。但这一形象并没有被忽略 我已被告知,问题可能存在于以下代码行内: ScreenCapture capture = new ScreenCapture(); capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi); 当我创建一个新的屏幕截图时,数据不会传递到“我

我正试图将我的屏幕截图显示在控制面板窗体上的图片框中。但这一形象并没有被忽略

我已被告知,问题可能存在于以下代码行内:

      ScreenCapture capture = new ScreenCapture();
         capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
当我创建一个新的屏幕截图时,数据不会传递到“我的图片”框。当我运行我的程序时,错误源于以下始终返回null的行:

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

 ProgressEventArgs args = new ProgressEventArgs(img);
 OnUpdateStatus(this, args);
然后在我的控制面板winform中,我尝试按如下方式显示图像:

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;
}
我得到的建议如下:

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;
}
您正在CaptureImage中查看OnUpdate状态的值 方法,对吗?因此,重要的是你调用哪个而不是屏幕截图 该方法将继续。我想你需要把屏幕盖递给 Form1的构造函数(需要将其存储在字段中),以便 在中调用CaptureImage时,可以使用相同的实例 表格1

我不知道如何实施给我的建议。在我的前两行代码中,我只是试图删除ScreenCapture类的一个新实例的创建,然后编写

  ScreenCapture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
但这会产生以下错误:

错误1非静态字段、方法或属性“DotFlickScreenCapture.ScreenCapture.CaptureImage(布尔、System.Drawing.Size、System.Drawing.Point、System.Drawing.Point、System.Drawing.Point、System.Drawing.Rectangle、string、string)”需要对象引用

因此,为了消除此错误,我将调用的方法转换为静态类,但这会在我的代码尝试存储拍摄的图像时产生大量不同的错误:

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

     ProgressEventArgs args = new ProgressEventArgs(img);
     OnUpdateStatus(this, args);
它声称我的OnUpdateStatus需要一个对象引用,并且在静态字段或环境中使用THIS关键字是无效的


是否有人能够帮助将我的图像显示在图像框中

诚恳地说,我无法理解您的代码。但我知道你得到了建议。它表示将捕获屏幕的对象传递给窗体的构造函数:

假设您有一个表单名
form1
。以下是
form1
类中必须包含的构造函数和小代码:

public partial class Form1 : Form
{
    Image CapturedImage;

    public Form1(Image imgObj) //"you need to pass _screenCap to the constructor of Form1"
    {
        InitializeComponent();
        CapturedImage = imgObj; //"which would need to store it in a field"
    }
}
构造函数将捕获的图像作为对象(image imgObj)并将其分配给字段(image CapturedImage;)

如果要在
图片框中显示它
。只需在构造函数中添加此行:

picturebox.Image = CapturedImage;
现在要从另一个表单调用它,请执行以下操作:

在执行操作时捕获屏幕(您的第一个代码是正确的,您在其中创建了
screenscapture
类的对象),并将其保存在对象中:

Image CapturedImageObj = capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
现在创建
form1
的实例,并将捕获的图像传递给表单的构造函数:

form1 ImageForm = new form1(CapturedImageObj);
并显示:

form1.Show();