如何在 C# 中截取 Winforms 控件/表单的屏幕截图?

2024-02-26

我有一个listviewwinforms 窗体上的控件。它填满了整个屏幕,但其中的项目超出了屏幕可以显示的范围。

如何截取整个控件的屏幕截图,就好像我可以显示控件的全部内容一样listview在屏幕上?所以如果整个listview需要 1000 x 4000 像素,那么我想要该尺寸的图像/位图。

我该怎么做呢?当我尝试 printscreen 时,它只返回屏幕上的内容,屏幕外的任何内容都显示为灰色。


表单是控件,因此您应该能够将整个内容保存到位图中,如下所示:

var bm = new Bitmap(yourForm.Width, yourForm.Height);
yourForm.DrawToBitmap(bm, bm.Size);
bm.Save(@"c:\whatever.gif", ImageFormat.Gif);

Update

DrawToBitmap只绘制屏幕上的内容。如果要绘制列表的全部内容,则必须遍历列表以找到内容的大小,然后绘制每个项目。就像是:

var f = yourControl.Font;
var lineHeight = f.GetHeight();

// Find size of canvas
var s = new SizeF();
using (var g = yourControl.CreateGraphics())
{
    foreach (var item in yourListBox.Items)
    {
        s.Height += lineHeight ;
        var itemWidth = g.MeasureString(item.Text, f).Width;
        if (s.Width < itemWidth)
            s.Width = itemWidth;
    }

    if (s.Width < yourControl.Width)
         s.Width = yourControl.Width;
}

using( var canvas = new Bitmap(s) )
using( var g = Graphics.FromImage(canvas) )
{
    var pt = new PointF();
    foreach (var item in yourListBox.Items)
    {
        pt.Y += lineHeight ;
        g.DrawString(item.Text, f, Brushes.Black, pt);
    }

    canvas.Save(wherever);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中截取 Winforms 控件/表单的屏幕截图? 的相关文章

  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • make_shared<>() 中的 WKWYL 优化是否会给某些多线程应用程序带来惩罚?

    前几天我偶然看到这个非常有趣的演示 http channel9 msdn com Events GoingNative GoingNative 2012 STL11 Magic Secrets作者 Stephan T Lavavej 其中提
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • C++ 模板可以提供 N 个给定类的公共父类吗?

    我正在寻找一个 C 模板 它可以找到一组给定类的共同父级 例如 class Animal class Mammal public Animal class Fish public Animal class Cat public Mammal
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 将日期时间显示为 MM/dd/yyyy HH:mm 格式 C#

    在数据库中 日期时间以 MM dd yyyy HH mm ss 格式存储 但是 我想以 MM dd yyyy HH mm 格式显示日期时间 我通过使用 String Format 进行了尝试 txtCampaignStartDate Tex
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 如何将 Laravel 7 连接到 Microsoft SQL Server?

    我真的很惊讶 Laravel 文档对于解释如何连接到 MS SQL Server 的限制 我认为有两个区域需要配置 env 文件和database php 与 Laravel 7 相比 网络上的大多数示例都没有显示相同的格式 我想知道在哪里
  • 优化编译器中的常量组合

    我有一个包含许多小型内联函数的头文件 他们中的大多数碰巧拥有恒定的数据 由于这些函数对性能至关重要 因此它们处理常量的方式变得很重要 AFAIK 有两种方法来引用常量 1 在稍后与应用程序链接的单独源文件中定义它们 2 就地定义常量 我会选
  • Powershell 转换为 Json 格式错误

    我正在使用 win shell 将 powershell 输出转换为 json 格式 以便稍后可以对其进行过滤 问题是我的 Json 格式很糟糕 这是代码 win shell Get ChildItem Path
  • Java FileWriter如何写入下一行

    我使用下面的代码将记录写入文件 记录可以写入文件中 但附加在一行中 每次我调用此方法示例 你好世界你好世界你好世界你好世界 如何修改代码 使输出如下所示 以便在读取文本时我可以使用 line hasNextLine 进行检查 你好世界你好世
  • 最新的(开源)聊天机器人/假人工智能?

    开源聊天机器人 假人工智能 技术 的最新进展是什么 ELIZA ALICE MegaHAL 仍然是 当前 吗 或者在过去十年中是否取得了任何进展 ChatScript 是我发现的用于开发会话代理的最佳开源工具 BSD 许可证 https g
  • 动态添加内容到面板

    可能是我的 javascript 能力不够 我正在尝试将列表 通过 javascript 添加项目 动态增强到 jquery 移动面板 下面的代码是该功能的工作 非工作 示例 完整的项目会有点太多的开销 并且您需要一些串行连接的设备来运行它
  • 未来 F# 是否有可能比其他 .Net 语言得到更多优化?

    Microsoft 是否有可能使 F 程序在 VM 执行时或更可能在编译时检测到程序是使用函数式语言构建的并自动更好地并行化它 现在我相信没有这样的努力来尝试和自动执行作为单线程程序构建的程序作为多线程程序 也就是说 开发人员将编写一个单线
  • 对自定义对象的向量进行排序

    我正在尝试在 java 中对 Vector 进行排序 但我的 Vector 不是 int 向量 它是对象向量 对象是 public MyObject numObj 0 price new Price pax new Pax 所以我有一个Ve
  • CodeRush 中自动添加 `using`

    我刚刚安装了 Visual Studio 的 CodeRush Pro 评估试用版 到目前为止我可以说我非常喜欢它 与 Resharper 相比 我真正缺少的只是一种功能 这就是 CodeRush 处理的方式using 当我输入一些未在 u
  • NextJs 错误的解决方案是什么:“标题元素收到一个包含超过 1 个元素作为子元素的数组。”

    创建一个组件来包装每个页面并希望接收每个页面的子级和标题会引发错误 标题元素收到一个包含超过 1 个元素作为子元素的数组 import Head from next head interface IProps children JSX El
  • Angular 2 - 通过路由器链路将对象从一个组件发送到另一个组件

    我试图通过路由器链路以角度 2 发送一个对象 我为人员数组人员中的每个人员对象创建一个人员配置文件组件 并将它们显示在屏幕上 div div
  • 捆绑组件的 currentinstance 值为 null

    Version 3 0 0 beta 18 复制链接 https github com anandkumarram vue3lib https github com anandkumarram vue3lib https github co
  • 在 Zend Framework 2 中处理 M-N 关系

    在 beta4 和最新的 beta5 中 DB 功能实现似乎已经基本完成 有几个教程如何使用 TableGateway 模式处理单个数据库 但似乎没有用于处理 M N 关系的教程 在 ZF1 中我们有findDependantRowset
  • 如何在 Roblox Studio 中优化 If 语句的过度使用

    此代码的目标是在 5 个预设位置之一随机生成一个球 GlowyBall 当玩家点击按钮时 该脚本就会激活 球还需要随机生成 3 种颜色中的一种 该代码在大部分情况下都有效 但在优化该代码时我遇到了困难 我不知道应该甚至可以使用哪种数据类型来
  • jQuery 使用数据库的 ajax 从元素中删除 ID 并刷新

    你好 目前我正在尝试使用 jQuery 来使用 ajax 获取多个字段的 id 并发送数据以通过 php 删除它 到目前为止 我能够删除该项目 但无法删除其他 id 例如 我有一个 for 循环 它将从数据库中获取信息 for i 0 i
  • 如何阻止用户在我的网站上水平滚动

    这是网站 http joshnh com http joshnh com 基本上 我有一些超宽的元素 这样它们看起来就像是从屏幕的右侧出来的 然后我正在使用overflow x hidden 在主体上隐藏溢出 但这并不能阻止页面在用户使用触
  • 解析不带引号的键的 JSON

    据我所知 在 JSON 中 键应该用双引号引起来 但是 我使用的数据源没有引用它们 这导致 Ruby JSON 解析器引发错误 有没有办法执行 非严格 解析 Example gt gt JSON parse name hello age 2
  • 如何将带有 unsigned char* 的结构从 C# 传递到 C++?

    我有一些C dll带有结构描述和一些方法 struct MSG STRUCT unsigned long dataSize unsigned char data 和功能例如 unsigned long ReadMsg unsigned lo
  • Vue js动态添加属性不响应

    我有一个组件显示有一个名为obj obj有两个属性 obj title and obj body 每个都绑定到一个文本字段 以便具有反应性和可编辑性 div div
  • 如何在 C# 中截取 Winforms 控件/表单的屏幕截图?

    我有一个listviewwinforms 窗体上的控件 它填满了整个屏幕 但其中的项目超出了屏幕可以显示的范围 如何截取整个控件的屏幕截图 就好像我可以显示控件的全部内容一样listview在屏幕上 所以如果整个listview需要 100