按钮图像离按钮顶部太远;太靠近按钮的底部

时间:2009-02-03 14:54:52

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:9)

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

解释

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

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

您的按钮具有奇数像素高度(23px),这意味着它具有真正的中心像素 - 像素12.VB尝试将图像的中心像素(8)定位在按钮的中心像素(12)的顶部。这使得图像的8个像素低于中心,7个像素超出中心。为了解决问题,图像上方会出现1像素的边距。

解决方案

在底部添加1行像素填充图像。图像现在的高度为奇数(17像素),使图像成为真正的中心像素,可以与按钮的中心像素完美对齐。

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

附加说明:EVEN尺寸的两个物体理论上应该能够完美地居中对齐。但奇怪的是,即使按钮和图像BOTH具有均匀的尺寸,也会出现对齐问题。 (显然,编译器在确定一个控件与另一个控件的中心像素的方式上不一致。)尽管如此,在这种情况下,同样的解决方案也适用。

答案 1 :(得分:2)

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

ImageAlign: MiddleRight
TextAlign: MiddleLeft

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

答案 2 :(得分:0)

只是一个问题:您是否肯定位图在注释图像顶部不包含任何信息?我已经不止一次发生过这种情况,在Photoshop中看起来正确,并且在实时代码中出现错误...:)

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