Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms PowerShell和Windows窗体工具提示自定义颜色_Winforms_Powershell_Powershell 4.0 - Fatal编程技术网

Winforms PowerShell和Windows窗体工具提示自定义颜色

Winforms PowerShell和Windows窗体工具提示自定义颜色,winforms,powershell,powershell-4.0,Winforms,Powershell,Powershell 4.0,我正在尝试用黑色背景(如果可能的话还有黑色边框)和白色文本定制一个简单的工具提示。我有下面的代码,但目前它很脆弱,有时有效,有时无效 有人能建议如何使这更可靠吗?谢谢 [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing

我正在尝试用黑色背景(如果可能的话还有黑色边框)和白色文本定制一个简单的工具提示。我有下面的代码,但目前它很脆弱,有时有效,有时无效

有人能建议如何使这更可靠吗?谢谢

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Windows.Forms.Application]::EnableVisualStyles()

Add-Type -AssemblyName System.Drawing

#create form
$form = New-Object System.Windows.Forms.Form

$shutdownBtn = New-Object System.Windows.Forms.Button
$shutdownBtn.Size = New-Object System.Drawing.Size(200, 40)
$shutdownBtn.Text = "Shut down"

$form.Controls.Add($shutdownBtn)

$tooltip2 = New-Object System.Windows.Forms.ToolTip
$tooltip2.SetToolTip($shutdownBtn, "Shut down.")

$tooltip2.OwnerDraw = $true 
$tooltip2.Add_Draw($tooltip2_Draw)
$tooltip2_Draw=[System.Windows.Forms.DrawToolTipEventHandler]{
        $fontstyle = New-Object System.Drawing.Font("Segoe UI", 9, [System.Drawing.FontStyle]::Normal)
        $format = [System.Drawing.StringFormat]::GenericTypographic
        $myBrush1 = new-object Drawing.SolidBrush White
        $_.Graphics.DrawString($_.ToolTipText, $fontstyle, $myBrush1, $_.Bounds.X, $_.Bounds.Y, $format)
        $myBrush2 = new-object Drawing.SolidBrush Black
        $_.Graphics.FillRectangle($myBrush2, $_.Bounds)
        $_.DrawBackground()
        $_.DrawBorder()
        $_.DrawText()
 }

$form_cleanup =
{
    $tooltip2.Remove_Draw($tooltip2_Draw)
    $form.remove_FormClosed($form_cleanup)
}

$form.add_FormClosed($form_cleanup)

[void]$form.ShowDialog()
$form.Dispose()

我会回答我自己的问题:

有几个明显的错误来自于一个疲惫的头脑。首先:

$tooltip2.Add_Draw($tooltip2_Draw) 
应该在我宣布后打电话给你

$tooltip2_Draw 
第二,我需要打电话

FillRectangle
在我打电话之前

DrawString
最后,因为我设置了OwnerDraw=$true,所以我不需要调用:

$_.DrawBackground()
$_.DrawBorder()
$_.DrawText()
因此,解决方案如下:

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Windows.Forms.Application]::EnableVisualStyles()

Add-Type -AssemblyName System.Drawing

#create form
$form = New-Object System.Windows.Forms.Form

$shutdownBtn = New-Object System.Windows.Forms.Button
$shutdownBtn.Size = New-Object System.Drawing.Size(200, 40)
$shutdownBtn.Text = "Shut down"

$form.Controls.Add($shutdownBtn)

$tooltip2 = New-Object System.Windows.Forms.ToolTip
$tooltip2.SetToolTip($shutdownBtn, "Shut down now.")

$tooltip2.OwnerDraw = $true 
$tooltip2_Draw=[System.Windows.Forms.DrawToolTipEventHandler]{
        $fontstyle = new-object System.Drawing.Font('Microsoft Sans Serif', 16, [System.Drawing.FontStyle]::Regular)
        $format = [System.Drawing.StringFormat]::GenericTypographic
        $format.LineAlignment = [System.Drawing.StringAlignment]::Center;
        $format.Alignment = [System.Drawing.StringAlignment]::Center;
        $whiteBrush = new-object Drawing.SolidBrush White
        $blackBrush = new-object Drawing.SolidBrush Black
        $_.Graphics.FillRectangle($blackBrush, $_.Bounds)
        $_.Graphics.DrawString($_.ToolTipText, $fontstyle, $whiteBrush, ($_.Bounds.X + ($_.Bounds.Width/2)), ($_.Bounds.Y + ($_.Bounds.Height/2)), $format)
       
 }
$tooltip2.Add_Draw($tooltip2_Draw)

$form_cleanup =
{
    $tooltip2.Remove_Draw($tooltip2_Draw)
    $form.remove_FormClosed($form_cleanup)
}

$form.add_FormClosed($form_cleanup)

[void]$form.ShowDialog()
$form.Dispose()