2017-10-08 94 views
0

我有一个示例代码来创建一个带有文本和小图像的标签的窗体。窗体隐藏()然后显示()总是重新渲染内容

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

'显示()' - >'的ShowDialog()'? –

+0

@AnsgarWiechers'.show()'会显示表单而不会挂起进程,当按下表单的按钮时等待返回值。 – mcuong

+0

据我可以确定一切都按顺序加载,但你的'标签图像'(这在示例中没有定义)是在'标签文本'的前面。我想你实际上是想使用'labelItem'属性将图像放在'label Text'后面。 – iRon

回答

1

我不能重现这个问题,但按照你的描述,我会解决这个问题,如下所示:
首先将你的$form放在屏幕边界之外。这将导致表单“不可见”,但所有与渲染相关的事件就像在屏幕上显示一样。比查找有关项目加载后发生的事件。我认为您正在寻找的活动是:$form.Activated,但您也可以考虑首先集中您的标签$form.Add_Activated({$label.focus}),然后使用例如“ $label$label.Add_Validated({...}))的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() 
+0

非常感谢@iRon 我在寻找像这样的事件触发器:D – mcuong