将FromArgb()作为参数传递给函数

时间:2013-04-24 19:59:24

标签: function powershell system.drawing.color

我有以下功能:

Function Color-Cells {
    Param (
        [Parameter(
            Mandatory = $true,
            Valuefrompipeline = $true)]
        [String]$Range,
        [Parameter(
            Mandatory = $true)]
        [System.Drawing.Color]$Color
    )
    $Global:WorkSheet.range($Range).Interior.color = $Color
}#End Function

我可以这样称呼:

Color-Cells -Range "A1" -Color LightBlue

没有任何问题。

我希望能够像这样调用函数:

Color-Cells -Range "A1" -Color FromArgb(217,217,217)

使用单元格的颜色选择更精细,但是当我这样做时,我收到以下错误:

Color-Cells : Cannot process argument transformation on parameter 'Color'. Cannot convert value 
"FromArgb(217,190,238)" to type "System.Drawing.Color". Error: "FromArgb(217 is not a valid value for Int32."
At line:70 char:32
+ Color-Cells -Range "A1" -Color "FromArgb(217,217,217)"
+                                ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Color-Cells], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Color-Cells

我试过调用这样的函数:

  1. "FromArgb(217,217,217)"
  2. 'FromArgb(217,217,217)'
  3. `"FromArgb(217,217,217)`"
  4. 他们都会产生错误。我对.Net不太熟悉,所以我不知道如何解决这个问题。我的最终目标是创建一个函数,可以根据[System.drawing.color]已知名称或RGB值为一系列单元格着色。

    为清晰起见编辑:

    TypeName特定于函数中的参数类型。当我调用函数Color-cells时,-Color参数是[System.Drawing.Color]类型。当我使用静态属性(例如Color-Cells -Color LightBlue)调用该函数时,它只能找到。但是,当我尝试调用方法(例如Color-Cells -Color FromArgb(217,217,217))时,就是当我收到错误消息时。有没有办法将方法传递给函数?

    根据迈克的回答,我可以成功完全调用这样的函数:

    Color-Cell -Range "A1" -Color $([System.Drawing.Color]::FromArgb(217,190,238))
    

    但是,我想调用函数(使用方法),而不是在命令周围添加$()而没有[System.Drawing.Color]::就像我只能使用属性(例如LightBlue)。

1 个答案:

答案 0 :(得分:2)

要调用静态方法,请使用[TYPENAME]::MethodName(args)

这样做你想要的,使用它:

[System.Drawing.Color]::FromArgb(217,217,217)