首先,我将解释我的程序。
我有一个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;
}
我花了几个小时在这上面,但我不明白为什么图像不会显示在我的控制面板上的图像框中。有谁能帮我摆脱困境吗?为什么我拍摄的屏幕截图没有显示在控制面板上的图片框中?
我认为这就是问题所在(有很多代码需要浏览-一个简短但完整的例子会更好):
ScreenCapture capture = new ScreenCapture();
capture.CaptureImage(...);
这是ScreenCapture
的一个新实例。它没有附加任何事件处理程序(这就是为什么你看到OnUpdateStatus
的值为null
。如果你想使用你在ControlPanel
类中创建的实例,你会想把它传递给你的Form1
(例如在构造函数中)。