Кир*_*пин 4 powershell winforms
哪种方法允许将 ARGB 转换为字符串'int, int, int'
?例子。将$Main
背景色设置为一个字符串'0, 100, 200'
。返回$Main.BackColor
给出 ARGB 但不是字符串 '0, 100, 200':
$Main = [System.Windows.Forms.Form] @{
BackColor = '0, 100, 200'
}
$Main.BackColor
--------------
R : 0
G : 100
B : 200
A : 255
IsKnownColor : False
IsEmpty : False
IsNamedColor : False
IsSystemColor : False
Name : ff0064c8
Run Code Online (Sandbox Code Playgroud)
该To.String()
方法返回结果Color [A=255, R=0, G=100, B=200]
。这不是预期的。
目前我正在这样做:
('R', 'G', 'B').ForEach({ $Main.BackColor.$_ }) -join ', '
--------------
0, 100, 200
Run Code Online (Sandbox Code Playgroud)
但是,我希望有特殊的方法来转换 as ARGB
to string
, as string
to ARGB
。这些方法是什么?谢谢
但是,我希望有特殊的方法可以将 as argb 转换为 string,将 string 转换为 argb。这些方法是什么?
你会这么认为,但据我所知,不幸的是,没有内置的双向转换。
以下是您可以做的几件事:
ConvertFrom-Color
函数:function ConvertFrom-Color
{
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[System.Drawing.Color[]]$InputColor
)
process {
foreach($color in $InputColor){
$color.R,$color.G,$color.B -join ', '
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在需要时使用:
PS C:\> $colorString = $Main.BackColor |ConvertFrom-Color
PS C:\> $colorString
0, 100, 200
Run Code Online (Sandbox Code Playgroud)
[int]
一种ARGB
颜色由 4 个 1 字节通道组成,完全适合 32 位整数。如果您需要使用单个参数传达不同的颜色,则已经支持:
PS C:\> $color = [System.Drawing.Color]'0,100,100'
PS C:\> $color.ToArgb()
-16751516
PS C:\> $argbValue = $color.ToArgb()
PS C:\> [System.Drawing.Color]::FromArgb($argbValue)
R : 0
G : 100
B : 100
A : 255
IsKnownColor : False
IsEmpty : False
IsNamedColor : False
IsSystemColor : False
Name : ff006464
Run Code Online (Sandbox Code Playgroud)
就像您的初始字符串表示一样,值得强调的是,[int]
在分配给类型化属性时,从表示转换既适用于显式转换也适用于隐式转换:
$argbValue = -16751516
# This works just fine
[System.Drawing.Color]$argbValue
# As does this
[System.Windows.Forms.Form]@{ BackColor = $argbValue }
Run Code Online (Sandbox Code Playgroud)
Color.ToString()
由于您对更改 的默认字符串表示形式的行为感兴趣System.Drawing.Color
,您不妨覆盖ToString()
方法实现:
Update-TypeData -TypeName System.Drawing.Color -MemberType ScriptMethod -MemberName ToString -Value {
$this.psobject.Properties['R','G','B'].Value -join ', '
} -Force
Run Code Online (Sandbox Code Playgroud)
现在,当转换为字符串时,所有实例都[System.Drawing.Color]
将使用您的自定义ToString()
方法:
PS C:\> "$($Main.BackColor)"
0, 100, 200
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
219 次 |
最近记录: |