我是在 Winforms 中使用事件处理程序的新手。
我想要做的是使用鼠标对我的桌面进行屏幕截图,以指定要捕获的区域,然后将此图像显示在图片中。我被建议在另一篇文章中使用事件处理程序来执行此操作,但我在尝试使其正常工作时遇到了一个真正的问题。有人可以看看我做了什么并告诉我我做错了什么吗?
如果做不到这一点,请指出我正确的方向来解决这个问题?
首先,我的屏幕截图代码:
class ScreenCapture
{
public delegate void StatusUpdateHandler(object sender, ProgressEventArgs e);
public static event StatusUpdateHandler OnUpdateStatus;
public static bool saveToClipboard = true;
public static void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
{
using (Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
if (showCursor)
{
Rectangle cursorBounds = new Rectangle(curPos, curSize);
Cursors.Default.Draw(g, cursorBounds);
}
}
if (saveToClipboard)
{
Image img = (Image)bitmap;
Clipboard.SetImage(img);
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this,args);
// this is where the screen capture is stored.
// it is this image I want pass to the image box
}
else
{
switch (extension)
{
case ".bmp":
bitmap.Save(FilePath, ImageFormat.Bmp);
break;
case ".jpg":
bitmap.Save(FilePath, ImageFormat.Jpeg);
break;
case ".gif":
bitmap.Save(FilePath, ImageFormat.Gif);
break;
case ".tiff":
bitmap.Save(FilePath, ImageFormat.Tiff);
break;
case ".png":
bitmap.Save(FilePath, ImageFormat.Png);
break;
default:
bitmap.Save(FilePath, ImageFormat.Jpeg);
break;
}
}
}
}
}
public class ProgressEventArgs : EventArgs
{
public Image { get; private set; }
public ProgressEventArgs( Image img)
{
Image = img;
}
}
我的 form1 类中的代码:
public partial class ControlPanel : Form
{
public EventHandler<ScreenCapture> capture;
private ScreenCapture _screenCap;
public ControlPanel()
{
InitializeComponent();
_screenCap = new ScreenCapture();
_screenCap.OnUpdateStatus += new ScreenCapture.StatusUpdateHandler(SetImage);
}
private void SetImage(object sender, ProgressEventArgs e)
{
// the image box I want the image to be passed to
// imagePreview.Image = e.OnUpdateStatus;
SetImage(e.Image);
}
private void btn_CaptureArea_Click(object sender, EventArgs e)
{
this.Hide();
Form1 form1 = new Form1();
form1.InstanceRef = this;
form1.Show();
}
}
我以前从未使用过这样的事件处理程序,所以我有点超出我的深度。
编辑
抱歉忘记在我的问题中添加更多细节。尽管主要错误仍然是我的程序不再像以前使用此新代码那样工作。我仍然希望捕获的图像显示在我的 form1 中的图片框中。
目前我的事件处理代码有 8 个错误。在以下代码部分中:
public class ProgressEventArgs : EventArgs
{
public readonly Image { get; private set; }
public ProgressEventArgs( Image img)
{
Image = img;
}
}
我的编译器不喜欢 get 或 set。正如我的编译器所声称的
令牌无效 ';' 在类、结构或接口成员声明中
然后,在下面的行中,ProgressEventArgs 收到以下错误:
预期的类、委托、枚举、接口或结构 但我的想法是它已经在类中。所以我真的对这个错误感到困惑。