VB.NET 淡出按钮正确

VB.NET Fading out button properly

如何正确淡出 out/in VB.NET 中的按钮?我可以淡化 out/in 标签使用:

Controls(i).ForeColor = Color.FromArgb(255, alpha, alpha, alpha)

(其中 Controls(i) 是来自 For Next 循环遍历 Me.Controls 中所有控件的标签;alpha 是 RGB 的值,也来自 For Next 循环)。

对我的按钮有用,因为更改 ForeColor 会使其余按钮的 UI 可见!

因此,我尝试的方法是使用已保存的 Resource 按钮图像(来自屏幕截图)并创建一个褪色的 in/out 版本以显示为 PictureBox:

Public Function SetImageOpacity(ByVal imgPic As Image, ByVal imgOpac As Double) As Image
    Dim bmpPic As New Bitmap(imgPic.Width, imgPic.Height)
    Dim grPic As Graphics = Graphics.FromImage(bmpPic)
    Dim imgAtt As New ImageAttributes()
    Dim cmxPic As New ColorMatrix()
    cmxPic.Matrix33 = imgOpac
    imgAtt.SetColorMatrix(cmxPic, ColorMatrixFlag.[Default], ColorAdjustType.Bitmap)
    grPic.DrawImage(imgPic, New Rectangle(178, 144, bmpPic.Width, bmpPic.Height), imgPic.Width, imgPic.Height, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, imgAtt)
    grPic.Dispose()
    imgAtt.Dispose()
    Return bmpPic
End Function

(其中 imgPic 是按钮的 Resource 图像,imgOpac 是 1 到 0 范围内的不透明度,其中 0 是透明的)。

然后我使用这张图片来设置我的 PictureBox 的图片:

picbox.Image = SetImageOpacity(My.Resources.Nextbutton, 1)

但是,我遇到一个小故障,即使 PictureBox 位于坐标 178, 144,它显示的图像显示在表单的左边缘(即错误的 X 坐标), Y坐标正确!

我觉得这可能与我对 .DrawImage(...) 的调用有关(在函数的第 8 行)- 但 the MSDN docs on this subject 对我来说非常不清楚。

如果之前有人问过,请link!

Graphics grPic 中的坐标是 client 相对于图像本身的坐标,而不是 Form 的坐标。所以 (0, 0) 是图像的左上角,不管该图像最终在某种控件中显示在哪里。

尝试将其更改为 (0, 0):

grPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), imgPic.Width, imgPic.Height, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, imgAtt)

为什么不使用 for 循环将按钮控件的不透明度以 0.01 为增量从 1 更改为 0?