You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何获取其他类生成的截图并赋值给窗体的PictureBox控件

问题原因梳理

  • 现有CaptureScreen静态方法无返回值,生成的截图Bitmap属于方法内部局部变量,方法执行完成后外部无法访问到该对象
  • 方法定义无参数,调用时传入screen2参数属于语法错误,无法通过编译
  • 即便给方法增加Bitmap类型参数,因为你在方法内部会new新的Bitmap对象,不加out/ref修饰的情况下,外部传入的变量不会指向你新生成的截图对象
  • 你写的Image方法定义在Screenshot类外部,属于语法错误

修复方案

最简单的方式是调整CaptureScreen方法直接返回生成的截图对象,逻辑更清晰,修改代码如下:

1. 修正Screenshot.cs代码

namespace CatchAreaToImage
{
    class Screenshot
    {
        // 修改方法返回值为Bitmap,直接返回生成的截图对象
        public static Bitmap CaptureScreen()
        {
            Bitmap screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            // 用using包裹Graphics对象,用完自动释放资源避免内存泄漏
            using (Graphics graphics = Graphics.FromImage(screen))
            {
                graphics.CopyFromScreen(0, 0, 0, 0, screen.Size);
            }
            return screen;
        }
    }
}

2. 修正Form1.cs中的点击事件代码

private void button1_Click(object sender, EventArgs e)
{
    // 直接获取方法返回的截图对象,赋值给PictureBox即可
    pBArea.Image = Screenshot.CaptureScreen();
    
    // 如果需要保留截图对象后续使用,也可以同时赋值给你定义的全局变量
    // screen2 = Screenshot.CaptureScreen();
    // pBArea.Image = screen2;
}

内容的提问来源于stack exchange,提问作者Winchester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:04