WinForms 中居中和滚动的 PictureBox

2023-12-02

我正在开发 WinForms 应用程序,但不知道如何解决问题。 我需要在表单中显示图像。因为图像可以任意大,所以我需要在包含图像的图片框上有滚动条,以便用户可以完整地看到它。 谷歌搜索后,我发现实现此目的的最佳方法是将 PictureBox 添加为面板的子控件,并使面板可自动调整大小和自动滚动。 由于使用设计器,我无法将图片框作为面板的子控件插入,因此我以编程方式执行了此操作。 我现在面临的问题是我似乎无法居中并滚动同时显示图片框。 如果我将图片框的锚点放在顶部、左侧、底部、右侧,则不会显示滚动条并且显示的图像很奇怪,如果我将锚点放回仅左上角,则图像不会居中。

有没有什么办法可以同时做这两件事? 这是我的面板和图片框的代码:

this.panelCapturedImage = new System.Windows.Forms.Panel();
this.panelCapturedImage.SuspendLayout();
this.panelCapturedImage.AutoScroll = true;
this.panelCapturedImage.AutoSize = true;
this.panelCapturedImage.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.panelCapturedImage.Controls.Add(this.pictureBoxCapturedImage);
this.panelCapturedImage.Location = new System.Drawing.Point(0, 49);
this.panelCapturedImage.Name = "panelCapturedImage";
this.panelCapturedImage.Size = new System.Drawing.Size(3, 3);
this.panelCapturedImage.TabIndex = 4;

this.pictureBoxCapturedImage.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBoxCapturedImage.Location = new System.Drawing.Point(0, 0);
this.pictureBoxCapturedImage.Name = "pictureBoxCapturedImage";
this.pictureBoxCapturedImage.Size = new System.Drawing.Size(0, 0);
this.pictureBoxCapturedImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.pictureBoxCapturedImage.TabIndex = 0;
this.pictureBoxCapturedImage.TabStop = false;

this.panelCapturedImage.Controls.Add(this.pictureBoxCapturedImage);

这是我设置图像的地方:

public Image CapturedImage
{
    set 
    { 
        pictureBoxCapturedImage.Image = value;
        pictureBoxCapturedImage.Size = value.Size;
    }
}

For the PictureBox, set SizeMode = AutoSize, Anchor it Top, Left,并设置其Location to 0, 0.

Set Panel.AutSize to False and Panel.AutoScroll to True.

当您设置PictureBox.Image属性,它会自动调整图像的大小。然后您可以使用该大小来设置面板的自动滚动位置财产:

public Image CapturedImage
{
    set 
    { 
        pictureBoxCapturedImage.Image = value;
        panelCapturedImage.AutoScrollPosition = 
            new Point { 
                X = (pictureBoxCapturedImage.Width - panelCapturedImage.Width) / 2, 
                Y = (pictureBoxCapturedImage.Height - panelCapturedImage.Height) / 2 
            };
    }
}

如果图像小于面板的尺寸,它将保留在左上角。如果您希望它在面板中居中,则必须添加逻辑来设置其Location适当地。

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

WinForms 中居中和滚动的 PictureBox 的相关文章

  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • C# 动态 Linq 变量Where 子句

    我正在按照 Scott Gu 的文章创建动态 LINQhttp weblogs asp net scottgu archive 2008 01 07 dynamic linq part 1 using the linq dynamic qu
  • string.empty 和 string[0] == '\0' 之间的区别

    假设我们有一个字符串 std string str some value is assigned 有什么区别str empty and str 0 0 C 11 及更高版本 string variable 0 如果字符串为空 则需要返回空字
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 外部组件中的控制器上的 404

    我在解决 Asp Net MVC 4 项目中的 404 响应时遇到问题 它是在 VS2012 中构建的 目标版本为 4 5 我已将预编译的视图和控制器内置到独立的 DLL 中 我能够动态加载 DLL 并从我的核心项目中检查它们 甚至调用它们
  • 为什么long long 2147483647 + 1 = -2147483648? [复制]

    这个问题在这里已经有答案了 为什么这段代码不打印相同的数字 long long a b a 2147483647 1 b 2147483648 printf lld n a printf lld n b 我知道int变量的最大数量是2147
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 如何使WPF TreeView风格成为WinForms TreeView?

    WPF 默认的 TreeView 非常好 我仍然希望它有连接每个子元素的线 就像 Windows 窗体 TreeView 一样 我在网上搜索了一些例子 但设计得不够好 我怎样才能用WPF实现它 让我回答我自己的问题 Code 您需要做的只是
  • “sizeof”对不完整类型列表结构 C 的无效应用

    我正在尝试实现一种处理页面错误的替换算法 因此 我尝试使用 malloc 创建一个循环链表 但出现以下错误 无效的应用程序sizeof to incomplete typepageInMemory 以下是代码 typedef struct
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d
  • 第一个随机数始终小于其余随机数

    我碰巧注意到 在 C 中 使用 std rand 方法调用的第一个随机数大多数时候都明显小于第二个随机数 关于 Qt 实现 第一个几乎总是小几个数量级 qsrand QTime currentTime msec qDebug lt lt q
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • 更改预处理到文件后出现错误 1 ​​错误 LNK1104

    我必须使用预处理器 所以我改变了 配置属性 gt C gt 预处理器 gt 预处理为文件 gt 是 并得到错误 错误 1 错误 LNK1104 无法打开文件 Debug asnreal obj 这个问题的解决办法 我必须在 lib 文件的路
  • 任何浮点密集型代码是否会在任何基于 x86 的架构中产生位精确的结果?

    我想知道使用浮点运算的 C 或 C 代码是否会在任何基于 x86 的体系结构中产生位精确的结果 无论代码的复杂性如何 据我所知 自 Intel 8087 以来的任何 x86 架构都使用准备处理 IEEE 754 浮点数的 FPU 单元 并且
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http

随机推荐

  • 突出显示时,不会为自定义 UIButton 子类调用 drawRect

    当对自定义 UIButton 子类使用 drawRect 时 在突出显示时似乎永远不会调用它来绘制按钮 我需要在触摸事件中为按钮调用 setNeedsDisplay 吗 我找到了一个简单的解决方案 只需将以下方法添加到您的 UIButton
  • 更改group by结果的颜色

    数据 火车 取自卡格尔泰坦尼克号 我有以下情节 train groupby Survived Sex Age plot kind hist legend True histtype step bins 15 I want to change
  • NSCollectionViewItem 子类中的自定义插座

    我觉得这是一个简单的任务 但我似乎无法使其发挥作用 我正在尝试使用带有自定义项目的 NSCollectionView 我向该项目的自定义视图添加了另一个 NSImageView 并对该视图进行了子类化 以便添加连接到该附加 NSImageV
  • numpy python 中的“IndexError:索引太多”

    我知道很多人问过这个问题 但我无法得到可以解决我的问题的合适答案 我有一个数组 X X 1 2 10 现在我正在尝试创建一个矩阵 Y 来读取这个 X 数组 我的代码是 make Y matrix Y np matrix np zeros l
  • 当前位置有抖动

    我在检索当前位置时遇到问题 Step 1 当我按下按钮时 它将打开默认弹出窗口以启用位置服务 因为我检查它没有启用位置 Step 2 如果我手动启用位置 我将获取当前位置 如果我执行第一步 它将不起作用 final Location loc
  • Xamarin iOS C# 从 UIWebView 在 Safari 中打开链接

    我正在使用 C 在 Xamarin 中使用 UIWebView 编写 iPhone 应用程序 默认情况下 Web 视图中的嵌入链接会在同一 Web 视图中打开网页 相反 我希望他们在新的 safari 浏览器实例中启动链接页面 这已经在 X
  • 使用 JavaScript 将两个数组的所有可能组合集合作为数组的数组

    请注意 链接的问题 如何为两个数组的内容创建所有可能的组合 does not解决这个特殊问题 贴上标签的人并不完全理解这种特定的排列和要求 如果你有两个数组 arr1 arr2 每个数组中有 n 个元素 即每个数组的长度相同 那么问题是 获
  • OWIN - Authentication.SignOut() 似乎没有删除 cookie

    我在 OWIN Cookie 身份验证方面遇到一些问题 我有一个 Net 站点 其中有一些 MVC 页面 这些页面使用 cookie 身份验证和受不记名令牌保护的 WebAPI 资源 当我注销时 我删除了客户端上的访问令牌 因此后续 API
  • 在 chrome://extensions 页面访问扩展程序 [重复]

    这个问题在这里已经有答案了 这是我的mainfest json content scripts all frames true css css event css matches u003Call urls gt run at docume
  • find-command:使用创建时间搜索

    如何找到 Jul 30 04 37 创建的内容并将它们移至 tmp 有事吗 find ctime 0037043007 exec mv tmp 参见 GNUfind手册 以及时间输入格式信息也 特别是 newerct 30 Jul 2009
  • 单击按钮时图像未保存在设备中

    目前 我正在使用毕加索库下载图像并在按下按钮时将其保存在设备中 问题是 当我按下按钮时 图像未下载 只显示消息 图像已下载 那么我该如何修复它呢 这是我的代码 PicassoDisplayImageAdapter java This cla
  • Angular 2 detectorChanges 与 setTimeout()

    我面临有关角度 2 变化检测的问题 我正在使用一个使用 onPush 策略的组件 我注意到它的子组件在更新时不会自行更新 它们本身也是 onPush 所以我将changeDetector detectChanges 添加到我的组件中代码及其
  • C++保留内存空间

    有没有什么方法可以保留默认 Windows 内存管理器稍后使用的内存空间 这样如果我的程序使用的空间不超过我在程序启动时保留的空间 我的应用程序就不会耗尽内存 当你有虚拟内存时 做这种事情是没有意义的
  • 为什么不在页面内容中使用 Iframe 的充分理由 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 好的 我正在寻找一些不在页面内容中使用 iFrame 的充分理由 我的朋友决定使用 iFrame 作为我们的聊天框并加载 html 页面 而不是仅仅使用ajax加载所需的参数并长轮询请求
  • 每隔几秒自动刷新或更新内容页面

    我在用Xamarin forms PCL 并且我需要每隔几秒刷新 更新内容页面及其数据 数据检索自API in the viewmodel 是否有任何方法或处理程序可以定期使用来调用Get Api定期在page xaml cs 就像是 me
  • PHP:Android 在使用嵌入式视频播放器时丢失 Session 和 Cookie 信息

    一整天都没有找到解决方案后 我在这里尝试一下 设想 客户端可以登录并访问视频文件 我使用 PHP 伪流 字节范围请求 提供视频文件 视频文件位于受保护的文件夹中 Setup 加载 php提供html5视频嵌入代码
  • 套接字接收缓冲区大小

    我的问题是关于 Linux 上 Python 的套接字编程 但由于 Python 的socket模块只是系统调用的包装器 recv recvfrom等等 它与 Python 无关 所以 根据docs 当我们调用recv方法 为了与硬件和网络
  • python 中的预自增运算符

    我来自 C C 背景 我不断地输入诸如 ix 1 fred objlist ix value 这不起作用 因为 python 中没有预自增运算符 它只是给了我索引为 1的项目 没关系 我知道如何解决这个问题 事实上 我最近才发现 当我在键盘
  • SQL Server 配置管理器在 SQL Server 2016 中的位置

    哪儿是SQL Server 配置管理器在 SQL Server 2016 中 它不在 SQL Server 2016 的菜单组下 我安装的是开发者版 1 Open run CTRL R 2 输入以下命令 SQLServerManager13
  • WinForms 中居中和滚动的 PictureBox

    我正在开发 WinForms 应用程序 但不知道如何解决问题 我需要在表单中显示图像 因为图像可以任意大 所以我需要在包含图像的图片框上有滚动条 以便用户可以完整地看到它 谷歌搜索后 我发现实现此目的的最佳方法是将 PictureBox 添