gpt4 book ai didi

winforms - 更改系统颜色

转载 作者:行者123 更新时间:2023-12-02 23:41:52 27 4
gpt4 key购买 nike

感谢您抽出宝贵的时间来帮助我。

我正在使用PowerShell构建GUI,并且我想覆盖默认的系统颜色。

例如,突出显示控件(TextBoxComboBox)时,窗体显示系统颜色。我想更改颜色以使用AliceBlue。到目前为止,我尝试了以下代码,但无济于事:

[System.Drawing.SystemColors]::Highlight = 'AliceBlue'
[System.Drawing.SystemColors]::HighlightText = 'AliceBlue'
[System.Drawing.SystemColors]::ScrollBar = 'AliceBlue'
[System.Drawing.SystemColors]::Control = 'AliceBlue'
[System.Drawing.SystemColors]::HotTrack = 'AliceBlue'
[System.Drawing.SystemColors]::Window = 'AliceBlue'
[System.Drawing.SystemColors]::WindowFrame = 'AliceBlue'

最佳答案

documentation表示您尝试设置的那些属性是只读的。

您可以通过调用user32.dll SetSysColors函数来做到这一点:

$signature = @'
[DllImport("user32.dll")]
public static extern bool SetSysColors(
int cElements,
int [] lpaElements,
uint [] lpaRgbValues);
'@

$type = Add-Type -MemberDefinition $signature `
-Name Win32Utils `
-Namespace SetSysColors `
-PassThru

$color = [Drawing.Color]::AliceBlue
# For RGB color values:
# $color = [Drawing.Color]::FromArgb(255,255,255)
$elements = @('13')
$colors = [Drawing.ColorTranslator]::ToWin32($color)

$type::SetSysColors($elements.Length, $elements, $colors)

其中 13元素表示 COLOR_HIGHLIGHT,它是控件中所选项目的颜色。

运行上面的代码后,结果如下:

组合框

enter image description here

文本框

enter image description here

您会看到实际文本的颜色已更改,几乎看不到。要更改此设置,只需运行:
$color = [Drawing.Color]::Black
$elements = @('14')
$colors = [Drawing.ColorTranslator]::ToWin32($color)
$type::SetSysColors($elements.Length, $elements, $colors)

其中 14表示 COLOR_HIGHLIGHTTEXT,它是控件中所选项目文本的颜色。

要了解有关 SetSysColors的更多信息,请检查 PInvoke。另外,请转到 here查找更多颜色代码。

我不知道是否可以只为PowerShell GUI设置突出显示颜色,而不能使用 WinFormsSetSysColor设置其他颜色,但是您可能会考虑的一种方法是使用 WPF TextBox而不是 WinForms。这样,您可以使用 SelectionBrushSelectionOpacity:
[xml]$xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window"
Title="Initial Window"
WindowStartupLocation = "CenterScreen"
ResizeMode="NoResize"
SizeToContent = "WidthAndHeight"
ShowInTaskbar = "True"
Background = "lightgray">
<StackPanel >
<Label Content='Type in this textbox' />
<TextBox x:Name="InputBox"
Height = "50"
SelectionBrush= "Green"
SelectionOpacity = "0.5" />
</StackPanel>
</Window>
"@

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )


$Window.ShowDialog() | Out-Null

关于winforms - 更改系统颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com