2017-07-17 40 views
0

我想给面板的.BackColor随机颜色。错误使用随机设置argb

$rndm1 = Get-Random -minimum 50 -maximum 240 
$rndm2 = Get-Random -minimum 50 -maximum 240 
$rndm3 = Get-Random -minimum 50 -maximum 240 

这显然作品:

$pBar.BackColor = [System.Drawing.color]::FromArgb(60,60,60) 

但如果使用随机数并不:

$rndmResult = ("'" + $rndm1 + ',' + $rndm2 + ',' + $rndm3 + "'") 
$pBar.BackColor = [System.Drawing.color]::FromArgb($rndmResult) 

我已经写了这么多不同的方式代码,但没有人可以工作。我也尝试以这种$rndm1 = ("'" + (Get-Random -minimum 50 -maximum 240) + "'")的方式编写$ rndm变量 - 但我无法绕过它。我究竟做错了什么?错误输出是:这取决于我如何放置"'

ERROR: Cannot convert argument "argb", with value: "'117,56,167'", for "FromArgb" to type "System.Int32": "Cannot convert value "'117,56,167'" to type "System.Int32".

ERROR: Cannot convert value "," to type "System.Int32". Error: "The input string had invalid format."

Powershell的工作室2016

+2

'[的System.Drawing.Color] :: FromArgb($ rndm1,$ rndm2,$ rndm3)'工作正常 –

回答

2

在这里,你是路过3个不同的整数:

$pBar.BackColor = [System.Drawing.color]::FromArgb(60,60,60) 

在这里,你传递一个字符串:

$rndmResult = ("'" + $rndm1 + ',' + $rndm2 + ',' + $rndm3 + "'") 
$pBar.BackColor = [System.Drawing.color]::FromArgb($rndmResult) 

而是直接传递整数:

$pBar.BackColor = [System.Drawing.color]::FromArgb($rndm1,$rndm2,$rndm3) 
+0

啊,感谢您的解释。这可能是我没有尝试的唯一的东西...... :)再次 - 谢谢! – MadsTheMan

1

在这一步:

$rndmResult = ("'" + $rndm1 + ',' + $rndm2 + ',' + $rndm3 + "'") 

您所创建的字符串'156,93,194'(假设获取-随机产生的号码156,93和194)。

FromArgb()没有重载,只有一个字符串作为它的参数。

直接值传递给functino代替:

[System.Drawing.color]::FromArgb($rndm1,$rndm2,$rndm3) 
+0

不知道我FromArgb()不能接受一个字符串作为它的参数,猜测那是我失败的时候。感谢您指出。 – MadsTheMan

+2

@MadsTheMan为了将来的参考,您可以输入没有括号的方法名称(如'[System.Drawing.Color] :: FromArgb'),并在提示符中按回车键或查找[MSDN上的文档](https: //msdn.microsoft.com/en-us/library/system.drawing.color.fromargb(v=vs.110).aspx)如果你想看到有效的重载方法 –

+0

谢谢,我一定会使用它从今起。 :) – MadsTheMan