winforms - 按钮图像离按钮顶部太远;离按钮底部太近

标签 winforms user-interface .net-2.0 button icons

我正在 VB.NET 2005 中处理 Windows 窗体,我想要一些带有图像的按钮(我说的是普通的、vanilla System.Windows.Forms.Button)。我已经按照我想要的方式设置了所有内容,但是按钮上的图像显示太低,以至于图标的底部几乎就在按钮的底部,并且图像上方有很多空间。

这是一个屏幕截图:
Button Screenshot http://www.freeimagehosting.net/uploads/b28a5c63b8.jpg

看看图标的角是如何刷到按钮底部的?

我的按钮高 23 像素,图像是 16 x 16 图标(转换为位图,以便可以将其分配给按钮的 Image 属性)。

我尝试将按钮的 Margin.All 属性设置为 0,并验证 Padding.All 属性为 0。我还尝试将按钮的 ImageAlign 更改为 TopLeft、MiddleLeft 和 BottomLeft,但这些设置似乎都没有任何影响。

有谁知道如何将图像定位到与按钮的顶部和底部边缘等距?如有必要,我可以调整按钮或图像的大小,但它们是我喜欢的大小,如果可能的话,我希望保持这种状态。

最佳答案

我刚刚遇到了一个类似的问题,经过深思熟虑,我能够解决这个问题。 (这些情况不是很好吗?)
说明
首先,重要的是要了解 ImageAlign 并不意味着您想要图像在按钮上的哪个位置。这意味着应该使用图像上的哪个点(像素)进行定位。因此,如果您选择“TopLeft”,则图像的左上角像素将在按钮上垂直居中。
当您有一个带有居中图像的按钮时,问题就出现了,其 ImageAlign 垂直设置为“中心”,并且其尺寸为偶数像素。您的图像是 16x16 像素 - 16 是偶数。中间像素理论上应该在像素 8 和像素 9 之间。由于没有像素 8.5,VB 向下舍入为 8,从而使用像素 8 作为定位像素。这是您不需要的上边距的根本原因。
你的按钮有一个奇数像素高度 (23px),这意味着它有一个真正的中心像素 - 像素 12。VB 试图将图像的中心像素 (8) 放在按钮的中心像素 (12) 的顶部。这使图像的 8 个像素低于中心,7 个像素高于中心。为了平衡,图像上方会出现一个 1 像素的边距。
解决方案
在底部用 1 行额外像素填充图像。图像现在的高度为奇数(17 像素),使图像具有真正的中心像素,可以与按钮的中心像素完美对齐。
这就是我自己解决问题的方式。然而,我突然想到了一个更简单的可能解决方案。您可以通过为图像分配 1px 的底部边距来获得相同的结果。我还没有测试过这个解决方案,但它在理论上似乎等同于第一个解决方案。
附加说明:EVEN 尺寸的两个对象理论上应该能够完美地居中对齐。但奇怪的是,即使按钮和图像都具有偶数尺寸,也会出现对齐问题。 (显然,编译器在确定一个控件与另一个控件的中心像素的方式上不一致。)尽管如此,在这种情况下,同样的解决方案适用。

关于winforms - 按钮图像离按钮顶部太远;离按钮底部太近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507380/

相关文章:

c# - 使用c#开发这样的winform

JavaFX 和 IntelliJ 错误 : java. lang.module.InvalidModuleDescriptorException

user-interface - 如何配置node-mysql?

javascript - JQGrid子网格Url : Is it possible to change the value of ? Id=id

c# - 发送消息到原始应用程序域

asp.net - 如何使用 Javascript 参数触发回发?

c# - 访问冲突 : Attempted to read or write protected memory

c# - Win Forms UserControl 未检测到按键

c# - 如何在Window应用程序中使用winmm.dll提高音频文件的速度

asp.net - 将 ASP.NET 从 1.1 版升级到 2.0 版 - 有什么问题吗?