表单Hide()然后Show()总是重新呈现内容

时间:2017-10-08 06:04:00

标签: winforms powershell

我有一个示例代码来创建一个带有文本和小图像标签的表单。

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Application]::EnableVisualStyles()

$label = [Windows.Forms.Label]@{
    Image  = $image
    Height = $image.Height
    Text   = 'Sample text.'
}
$form = [Windows.Forms.Form]@{
    ControlBox      = $false
    AutoSizeMode    = "GrowAndShrink"
    AutoSize        = $true
    FormBorderStyle = "fixedDialog"
    AutoScaleMode   = "dpi"
    StartPosition   = "centerScreen"
}
$form.Controls.Add($label)
$form.Show()

显示的是表单,但$label的内容加载较慢,背景为白色。我尝试Hide()然后Show()表单并看到它每次重新加载$label的内容。

请告诉我如何在$label表单时加载Show()的内容,以便每次都看不到内容加载白色背景。

1 个答案:

答案 0 :(得分:1)

我无法重现这个问题但是按照你的描述,我会按照以下方式解决这个问题:
首先将$form置于屏幕边界之外。这将导致表单“不可见”,但与渲染相关的所有事件都像在屏幕上显示一样工作。找到有关项目加载后的事件。我认为您要查找的内容是:$form.Activated,但您也可以考虑首先关注标签$form.Add_Activated({$label.focus}),然后使用例如validated$label)的$label.Add_Validated({...})事件 无论如何,在此活动中,将您的表格放回屏幕中心。我很安心移动您的表单不会像hide() - show()方法那样完全重新呈现:

Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Application]::EnableVisualStyles()

$label = [Windows.Forms.Label]@{
    Text   = 'Sample text.'
}
$form = [Windows.Forms.Form]@{
    ControlBox      = $false
    AutoSizeMode    = "GrowAndShrink"
    AutoSize        = $true
    FormBorderStyle = "fixedDialog"
    AutoScaleMode   = "dpi"
    StartPosition   = "manual"
    Left            = -9999
    Top             = -9999
}
$form.Add_Activated({
    $Screen = [Windows.Forms.Screen]::PrimaryScreen.Bounds
    $Form.Left = ($Screen.Width  - $Form.Width)  / 2
    $Form.Top  = ($Screen.Height - $Form.Height) / 2
})
$form.Controls.Add($label)
$form.Show()