使用Windows窗体在PowerShell中由PictureBox隐藏的标签

我有PictureBox问题。

当我将PictureBox对接到右上方时,它隐藏了位于表单中心的标签的一部分。 我怎样才能把PictureBox标签? 我认为这是两个( ImageLabel声明)对接声明的问题,这就是为什么它被PictureBox隐藏。

我怎样才能正确地做到这一点?

表单声明:

 $Form = New-Object System.Windows.Forms.Form $Form.Text = "Something" $Form.StartPosition = "CenterScreen" $Form.Topmost = $True $Form.BackColor = "White" $Form.Width = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width $Form.Height = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height - 50 #$Form.AutoSize = $True $Form.AutoSizeMode = "GrowAndShrink" $Form.ControlBox = $false $Form.MinimumSize = New-Object System.Drawing.Size(1280,1024) $Form.MaximumSize = New-Object System.Drawing.Size(1920,1080) 

图像声明:

 $Image = [system.drawing.image]::FromFile("C:\xxx.png") $pictureBox = new-object Windows.Forms.PictureBox $pictureBox.Dock = [System.Windows.Forms.DockStyle]::Right $pictureBox.BackColor = "Transparent" #$pictureBox.Anchor = [System.Windows.Forms.AnchorStyles]::Right $pictureBox.AutoSize = $True $pictureBox.Image=$Image $Form.Controls.Add($pictureBox) 

标签声明:

 $redLabel1 = New-Object System.Windows.Forms.Label $redLabel1.Location = New-Object System.Drawing.Size($Form.Width, $Form.Height) $redLabel1.AutoSize = $False $redLabel1.TextAlign = "MiddleCenter" $redLabel1.Dock = "Fill" $redLabel1.Text = "Something" $redLabel1.ForeColor = "Red" $redLabel1.BackColor = "Transparent" $Font = New-Object System.Drawing.Font("Arial", 55, [System.Drawing.FontStyle]::Bold) $redLabel1.Font = $Font $Form.Controls.Add($redLabel1) 

编辑:

BringToFront()方法已经testing并在50%的工作。 文本不是以表单为中心,当标签遇到PictureBox ,文本被包裹..我想这个标签将以某种方式跳过PictureBox ..

截图:

在这里输入图像说明

我很确定你的标签没有被图片隐藏,但是放在这里取决于图像的Z顺序 – 和标签控件(在例子中没有显示丢失控件):

  • 如果你fill dock的第一个控件而不是right dock第二个控件,第一个控件将只填充可用的剩余空间。
  • 如果您right dock第一个控件,而不是fill dock第二个控件。 第二个控件将占用第一个控件背后的所有空间

我很快修改了我的Windows窗体包装器的例子,以显示这个:

 $Form = Form-Control Form @{Text = "Dock test"; StartPosition = "CenterScreen"; Padding = 4} $Table = $Form | Form TableLayoutPanel @{RowCount = 2; ColumnCount = 3; ColumnStyles = ("Percent", 50), "AutoSize", "AutoSize"; Dock = "Fill"} $Panel = $Table | Form Panel @{Dock = "Fill"; BorderStyle = "FixedSingle"; BackColor = "Teal"} -Set @{RowSpan = 2} $Dock = ForEach ($i in 1..2) { $Button = $Panel | Form Button @{Location = "25, $(75 * $i - 50)"; Size = "50, 50"; BackColor = "Silver"; Enabled = $False; Text = $i} $Group = $Table | Form GroupBox @{Text = "Dock $i"; AutoSize = $True} $Flow = $Group | Form FlowLayoutPanel @{AutoSize = $True; FlowDirection = "TopDown"; Dock = "Fill"; Padding = 4} $Radio = "None", "Top", "Left", "Bottom", "Right", "Fill" | ForEach { $Flow | Form RadioButton @{Text = $_; AutoSize = $True; Click = ([ScriptBlock]::Create("`$Dock[$($i - 1)].Button.Dock = `$This.Text"))} } New-Object PSObject -Property @{Button = $Button; Group = $Group; Flow = $Flow; Radio = $Radio} } $Close = $Table | Form Button @{Text = "Close"; Dock = "Bottom"; Click = {$Form.Close()}} -Set @{ColumnSpan = 2} $Form.ShowDialog() 

只是几个例子:

在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明

可能的解决方案:

  • 不要停靠标签,而是将其定位或使用锚(另请参见: Dock和Anchor之间的区别
  • 使用其他对接组合,例如:图像right和标签Bottom

有一个名为Control.BringToFront的方法: https : Control.BringToFront ( v= Control.BringToFront

所以它应该在你的代码中:

 $redLabel1.BringToFront()