Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET淡出按钮是否正确_Vb.net_Winforms_Button_Picturebox_Fade - Fatal编程技术网

VB.NET淡出按钮是否正确

VB.NET淡出按钮是否正确,vb.net,winforms,button,picturebox,fade,Vb.net,Winforms,Button,Picturebox,Fade,如何在VB.NET中正确淡出/淡入按钮?我可以使用以下方法淡出/淡入标签: Controls(i).ForeColor = Color.FromArgb(255, alpha, alpha, alpha) (其中控件(i)是下一个循环的标签,通过Me中的所有控件。控件;alpha是RGB的值,也是下一个循环的标签) 这对我来说不适用于按钮,因为更改ForeColor会使其余按钮的UI可见 因此,我尝试的方法是使用保存的按钮的资源图像(来自屏幕截图),并创建一个淡入/淡出版本,作为图像显示在图片

如何在VB.NET中正确淡出/淡入按钮?我可以使用以下方法淡出/淡入标签:

Controls(i).ForeColor = Color.FromArgb(255, alpha, alpha, alpha)
(其中
控件(i)
下一个
循环的
标签,通过
Me中的所有控件。
控件
alpha
是RGB的值,也是
下一个
循环的
标签)

这对我来说不适用于按钮,因为更改
ForeColor
会使其余按钮的UI可见

因此,我尝试的方法是使用保存的按钮的
资源
图像(来自屏幕截图),并创建一个淡入/淡出版本,作为图像显示在
图片框中

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
是按钮的
资源
图像,
imgOpac
是比例为1到0的不透明度,其中0是透明的)

然后,我使用此图像设置我的
PictureBox
图像:

picbox.Image = SetImageOpacity(My.Resources.Nextbutton, 1)
但是,我遇到了一个小问题,即即使
PictureBox
位于坐标
178、144
,它显示的图像仍显示在表单的左边缘(即错误的X坐标),Y坐标正确

我有一种感觉,这可能与我调用
.DrawImage(
..
(在函数的第8行)有关,但我不太清楚


如果以前有人问过,请链接

图形
grPic
中的坐标是相对于图像本身而不是表单的客户坐标。因此,(0,0)是图像的左上角,而不管该图像最终在某种控件中显示在何处

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


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

非常感谢,我会尝试!正如我在回答中所解释的那样,这并没有达到我的预期效果-@Idle\u Mind用我的
SetImageOpacity
sub解释了这个问题。无论如何,谢谢你的回答!
grPic.DrawImage(imgPic, New Rectangle(0, 0, bmpPic.Width, bmpPic.Height), imgPic.Width, imgPic.Height, imgPic.Width, imgPic.Height, GraphicsUnit.Pixel, imgAtt)