我有一个示例代码来创建一个带有文本和小图像标签的表单。
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()
的内容,以便每次都看不到内容加载白色背景。
答案 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()