我刚刚遇到了一个类似的问题,我通过认真思考能够解决这个问题。(这些情况不是很好吗?)
说明
首先,重要的是要了解 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.