【问题标题】:Label hidden by PictureBox in Powershell using Windows Forms使用 Windows 窗体在 Powershell 中被 PictureBox 隐藏的标签
【发布时间】:2018-04-20 19:06:46
【问题描述】:

PictureBox 有问题。

当我将PictureBox 停靠在右上角时,它隐藏了位于表单中心的标签的一部分。我如何将标签放在PictureBox 的前面?我认为问题在于(Image 和 Label 声明)中的对接声明,这就是它被 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() 方法已经过测试并在 50% 中工作。文本不在表格中居中,当标签遇到PictureBox 时,文本会被换行。我希望该标签会以某种方式跳过PictureBox..

截图:

【问题讨论】:

  • 将您尝试过的内容添加到您的问题中(BringToFront() 或其他方法)
  • 好的,我在错误的地方使用了这个 BringToFront()。添加标签 Control 后它正在工作,但标签不在表格中心。它遇到图片框时被包裹,我想覆盖图片框,使其居中..所以似乎 BringToFront 将我的问题解决了 50%..
  • 你能用截图展示一下它的样子吗?
  • 最后添加有问题。
  • 你能试试这个吗:$redLabel1.WordWrap = $false。它还应该取决于标签的宽度。

标签: windows forms powershell


【解决方案1】:

有一个方法叫Control.BringToFront:https://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.bringtofront(v=vs.110).aspx

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

$redLabel1.BringToFront()

【讨论】:

  • 这个方法我已经试过了。它没有帮助,它仍然被削减。
【解决方案2】:

我很确定您的标签没有被图片隐藏,但只是搁置这取决于图像的 Z-Order - 和标签控件(在示例中的丢失控件中没有显示):

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

我已经快速修改了我的 Windows-Form wrapper 示例,以显示以下内容:

$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()

仅举几个例子:

可能的解决方案:

【讨论】:

  • 当我使用 Anchor 时,标签消失了,我不知道为什么...我无法定位它,因为我希望在调整窗口大小时内容会自动调整大小。使用另一个停靠组合并没有解决我的问题,因为标签应该在窗口中居中,并且在底部我希望有一些事件的按钮。
  • 感谢您的所有回答和帮助。我做到了。对于pictureBox,我使用与表单宽度和高度相关的位置锚定到“顶部,右侧”。对于label,我还使用了指定位置的对接。我删除了BringToFront 和SendToBack。
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 2022-12-31
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多