2013-04-24 4 views
1

У меня есть следующие функции:Передача FromArgb() в качестве параметра функции

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, поэтому не знаю, как это исправить. Моя конечная цель - создать функцию, которая может окрасить диапазон ячеек на основе либо известного имени или значения RGB [System.drawing.color].

Редактировать для ясности:

TypeName специфичен как тип параметра в функции. Когда я вызываю функцию Color-cells, параметр -Color является типом [System.Drawing.Color]. Когда я вызываю функцию, используя статическое свойство (например, Color-Cells -Color LightBlue), она работает только для поиска. Однако, когда я пытаюсь вызвать метод (например, Color-Cells -Color FromArgb(217,217,217)), вот когда я получаю сообщение об ошибке. Есть ли способ передать только метод в функцию?

ответ Per Майка я могу успех полностью функция называется так:

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

Однако, я хотел бы, чтобы вызвать функцию (используя метод) без добавления $() вокруг команды и без [System.Drawing.Color]:: как Я могу использовать только свойства (например, LightBlue).

ответ

2

Чтобы вызвать статические методы, используйте [TYPENAME]::MethodName(args).

Так что к тому, что Вы желаете, используйте:

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

мне пришлось завернуть его в '$()', чтобы держать ошибку прочь. Есть ли способ передать только «FromArgb (217,217,217)» в качестве параметра, не требуя '[system.drawing.color] ::' со статическим методом? Я могу сделать это со статическим свойством, но пока не нашел способ передать статический метод. – Nick

+0

Я не знаю, как получить доступ к статическому члену (методу или свойству) без указания имени типа. –

+0

Типичное имя специфично как тип параметра в функции. Когда я вызываю функцию «Цветные ячейки», переключатель '-Color' - это тип' [System.Drawing.Color] '. Когда я вызываю функцию с использованием статического свойства, она просто находит. Однако, когда я пытаюсь вызвать метод, я получаю сообщение об ошибке. Я собираюсь обновить вопрос, чтобы разобраться. – Nick