5

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

这是截图:
按钮截图 http://www.freeimagehosting.net/uploads/b28a5c63b8.jpg

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

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

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

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

4

3 回答 3

9

我刚刚遇到了一个类似的问题,我通过认真思考能够解决这个问题。(这些情况不是很好吗?)

说明

首先,重要的是要了解 ImageAlign 并不意味着您想要图像在按钮上的哪个位置。这意味着应该使用图像上的哪个点(像素)进行定位。因此,如果您选择“TopLeft”,则图像最左上角的像素将在按钮上垂直居中。

当您有一个带有居中图像的按钮时,问题就出现了,其 ImageAlign 垂直设置为“中心”,并且其尺寸为偶数像素。您的图像是 16x16 像素 - 16 是偶数。中间像素理论上在像素 8 和像素 9 之间。由于没有像素 8.5,VB 向下舍入到 8,从而使用像素 8 作为定位像素。这是您不需要的上边距的根本原因。

您的按钮具有奇数像素高度 (23px),这意味着它具有真正的中心像素 - 像素 12。VB 尝试将图像的中心像素 (8) 定位在按钮的中心像素 (12) 的顶部。这将图像的 8 个像素置于中心下方,将 7 个像素置于中心之上。为了平衡,图像上方会出现 1 像素的边距。

解决方案

用底部额外的 1 行像素填充图像。图像现在有一个奇怪的高度(17 像素),使图像具有真正的中心像素,可以与按钮的中心像素完美对齐。

这就是我为自己解决问题的方法。但是,我刚刚想到了一个更简单的可能解决方案。通过为图像分配 1 像素的下边距,您可能会获得相同的结果。我没有测试过这个解决方案,但理论上它似乎等同于第一个解决方案。

Additional note: Two objects of EVEN dimensions should theoretically be able to center-align perfectly. But strangely enough, the alignment problem occurs even if the button AND the image BOTH have even dimensions. (Apparently the compiler is not consistent in the way it determines the center pixel of one control vs another.) Nonetheless, in this case, the same solution applies.

于 2010-08-30T00:22:20.287 回答
2

通常,我们将设置以下属性(例如,对于右侧的图像):

ImageAlign: MiddleRight
TextAlign: MiddleLeft

您需要以类似的方式对齐文本和图像。除此之外,请确保您设置的是 Image 属性,而不是 BackgroundImage 属性,并确保您正确地将图标转换为普通位图。你试过一个普通的位图文件吗?

于 2009-02-03T15:06:18.177 回答
0

只是一个问题:您确定位图在笔记图像的顶部不包含任何信息吗?我不止一次遇到过这种情况,裁剪在 Photoshop 中看起来正确,但在实时代码中却不正确...... :)

如果是这种情况,您的代码可能是完美的;)

于 2009-03-20T14:54:05.787 回答