【问题标题】:Passing FromArgb() as a parameter to a function将 FromArgb() 作为参数传递给函数
【发布时间】:2013-04-24 19:59:23
【问题描述】:

我有以下功能:

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)`"

而且它们都会产生错误。我对.Net不是很熟悉,所以我不确定如何解决这个问题。我的最终目标是创建一个函数,该函数可以根据 [System.drawing.color] 已知名称或 RGB 值为一系列单元格着色。

为清楚起见进行编辑:

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

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

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

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

【问题讨论】:

    标签: function powershell system.drawing.color


    【解决方案1】:

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

    所以做你想要的,使用这个:

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

    【讨论】:

    • 我不得不将它包裹在 $() 中以防止错误发生。有没有办法只传递FromArgb(217,217,217) 作为参数,而不需要使用静态方法的[system.drawing.color]::?我可以用静态属性做到这一点,但我还没有找到传递静态方法的方法。
    • 我不知道在不指定类型名的情况下访问静态成员(方法或属性)的任何方法。
    • typename 指定为函数中的参数类型。当我调用函数Color-cells 时,-Color 开关是[System.Drawing.Color] 类型。当我使用静态属性调用该函数时,它只是查找。但是,当我尝试调用一个方法时,就会收到错误消息。我将更新问题以清除它。
    • 我猜 PowerShell 正在基于类型适配器为您执行从字符串 ('LightBlue') 到颜色的类型转换。例如,您可以执行 [System.Drawing.Color]'LightBlue' 并获得相同的值。
    • 我的意思是,我认为它不是使用静态属性,而是将字符串转换为颜色。
    猜你喜欢
    • 2013-01-27
    • 2021-04-13
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多