Winforms 在powershell中隐藏水平滚动条

Winforms 在powershell中隐藏水平滚动条,winforms,powershell,powershell-2.0,Winforms,Powershell,Powershell 2.0,我有一个桌面布局面板,我已经打开了autoscroll。我想完全隐藏水平滚动条,但不知道这是怎么可能的。似乎我可以将VScroll设置为true,将HScroll设置为false,但我不确定如何从tablelayoutpanel对象访问这些属性。如何隐藏水平滚动条 [CmdletBinding()] Param() Set-StrictMode -Version 2 [void] [System.Reflection.Assembly]::LoadWithPartialName("Syste

我有一个桌面布局面板,我已经打开了autoscroll。我想完全隐藏水平滚动条,但不知道这是怎么可能的。似乎我可以将VScroll设置为true,将HScroll设置为false,但我不确定如何从tablelayoutpanel对象访问这些属性。如何隐藏水平滚动条

[CmdletBinding()]

Param()

Set-StrictMode -Version 2
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null

Write-Verbose "Create the main form"
$form = New-Object Windows.Forms.Form
$form.Size = New-Object Drawing.Size @(900, 600)

$form.SuspendLayout()

$dataSize = 70
$dataHeight = 20
$volumeSize = 280
$dp = New-Object Windows.Forms.TableLayoutPanel
$addButton = New-Object Windows.Forms.Button
$addButton.Text = "Add"
$addButton.name = "outputButton"
$addButton.Add_Click({Add-Row})
$addButton.Location = New-Object System.Drawing.Point(0,500)
$correctedWidth = 0

Function Add-Row ($txt) {

    write-verbose "add row"
    $script:dp.RowCount++
    $zeroBasedRow = $dp.RowCount - 1
    write-verbose $zeroBasedRow
    for ($i=0; $i -lt 7; $i++) {
        $label = New-Object System.Windows.Forms.Label
        $label.TextAlign = "MiddleCenter"
        $label.Text = "0"
        $label.Font = "Verdana, 9pt"
        $label.Size = "$dataSize,$dataHeight"
        $label.BackColor = "Transparent"
        if ($i -eq 0) {
            $label.Size = "$correctedWidth,$dataHeight"
            if ($txt -eq $null){
                $label.Text = "12345678901234567890123456789012"
            } else {
                $label.Text = $txt
            }
        }
        $dp.Controls.Add($label,$i,$zeroBasedRow)
    }
}

Function Create-Data-Panel ($width, $height, $correction) {

    Write-Verbose "Create the panel that holds the data"
    $dataPanel = New-Object Windows.Forms.TableLayoutPanel
    $dataPanel.Size = New-Object Drawing.Size @($width,$height)
    $dataPanel.AutoScroll = $true
    #$dataPanel.VerticalScroll.Enabled = $true
    #$dataPanel.VerticalScroll.Visible = $true
    #$dataPanel.HorizontalScroll.Enabled = $false
    #$dataPanel.HorizontalScroll.Visible = $false
    $dataPanel.BackColor = "Transparent"
    $dataPanel.CellBorderStyle = "None"
    $dataPanel.RowCount = 0
    $dataPanel.ColumnCount = 7  

    $script:correctedWidth = $volumeSize - $correction

    return $dataPanel
}

$hght = $form.size.height * 3/4
$dp = Create-Data-Panel 760 300 4
for ($j=0; $j -lt 50; $j++){     # LINE OF INTEREST!!!!!!
    $txt = "$j 12345678901234567890123456789012"
    Add-Row $txt
}
$form.Controls.Add($dp)
$form.Controls.Add($addButton)

$form.Add_Shown( { $form.Activate() } )    
$form.ResumeLayout()
$form.StartPosition = "CenterScreen"    
$form.ShowDialog()

请注意,AutoScroll处于启用状态。如果按原样运行此脚本,TableLayoutPanel将仅显示垂直滚动条;按“添加”按钮任意次数,您将看到表格末尾有新条目,滚动条仅显示垂直滚动条。问题是,我正在使用的TableLayoutPanel没有任何初始数据,因此基本上,“兴趣线!!!!!!!”变成了$j边界值的0。将该值更改为零,使该行显示“for($j=0;$j-lt 0;$j++){#感兴趣的行!!!!!!!”,然后运行脚本(注意表格为空。按“Add”按钮(注意,在需要滚动条之前不会显示滚动条,这不是问题)。填写表格以便需要垂直滚动条,您将看到垂直滚动条和水平滚动条都会出现–我只想要垂直滚动条而不是水平滚动条–因此我的问题是如何隐藏水平滚动条?谢谢!

问题是滚动条在面板中向内延伸,从而降低ava嵌入式控件的可用空间

因此,一旦由于
.AutoScroll
被设置为
$true
而显示垂直滚动条,就没有足够的水平空间来放置标签,水平滚动条也会显示出来

.AutoScroll
设置为
$true
时,您无法使用
.HorizontalScrollBar.Visble=$false
等语句手动关闭滚动条-此类尝试将被忽略

我相信有更好的解决方案,但这里有一个快速解决方案:

  • 显示垂直滚动条后,将面板加宽垂直滚动条的宽度,从而导致
    .AutoScroll
    最终不显示水平滚动条

  • 但请注意,当添加导致垂直滚动条显示的行时,水平滚动条将在隐藏之前明显闪烁

函数添加行($txt){
编写详细的“添加索引为$($dp.RowCount)的行”
$dp.SuspendLayout()
$dp.RowCount++
对于($i=0;$i-lt 7;$i++){
$label=新对象System.Windows.Forms.label
$label.TextAlign=“MiddleCenter”
$label.Text=“0”
$label.Font=“Verdana,9pt”
$label.Size=“$dataSize,$dataHeight”
$label.BackColor=“透明”
如果($i-等式0){
$label.Size=“$correctedWidth,$dataHeight”
如果($txt-eq$null){
$label.Text=“1234567890121345678901234567890123456789012”
}否则{
$label.Text=$txt
}
}
$dp.Controls.Add($label,$i,$dp.RowCount-1)
}    
$dp.ResumeLayout()
#如果水平滚动条刚刚作为后续效果出现
#AutoScroll刚刚打开垂直滚动条,
#将面板加宽垂直滚动条的宽度
#从而使水平滚动条再次消失。
如果($dp.HorizontalScroll.Visible){
$dp.width+=[System.Windows.Forms.SystemInformation]::垂直滚动条宽度
}
}


另一方面:在加载程序集的语句中同时使用
[void]
和|
Out Null
是不必要的,并且在PSv5中实际上会失败(可能也是4或3)。

问题是滚动条在面板中向内延伸,减少了嵌入式控件的可用空间

因此,一旦由于
.AutoScroll
被设置为
$true
而显示垂直滚动条,就没有足够的水平空间来放置标签,水平滚动条也会显示出来

.AutoScroll
设置为
$true
时,您无法使用
.HorizontalScrollBar.Visble=$false
等语句手动关闭滚动条-此类尝试将被忽略

我相信有更好的解决方案,但这里有一个快速解决方案:

  • 显示垂直滚动条后,将面板加宽垂直滚动条的宽度,从而导致
    .AutoScroll
    最终不显示水平滚动条

  • 但请注意,当添加导致垂直滚动条显示的行时,水平滚动条将在隐藏之前明显闪烁

函数添加行($txt){
编写详细的“添加索引为$($dp.RowCount)的行”
$dp.SuspendLayout()
$dp.RowCount++
对于($i=0;$i-lt 7;$i++){
$label=新对象System.Windows.Forms.label
$label.TextAlign=“MiddleCenter”
$label.Text=“0”
$label.Font=“Verdana,9pt”
$label.Size=“$dataSize,$dataHeight”
$label.BackColor=“透明”
如果($i-等式0){
$label.Size=“$correctedWidth,$dataHeight”
如果($txt-eq$null){
$label.Text=“1234567890121345678901234567890123456789012”
}否则{
$label.Text=$txt
}
}
$dp.Controls.Add($label,$i,$dp.RowCount-1)
}    
$dp.ResumeLayout()
#如果水平滚动条刚刚作为后续效果出现
#AutoScroll刚刚打开垂直滚动条,
#将面板加宽垂直滚动条的宽度
#从而使水平滚动条再次消失。
如果($dp.HorizontalScroll.Visible){
$dp.width+=[System.Windows.Forms.SystemInformation]::垂直滚动条宽度
}
}

附带说明:在加载ASEM的语句中同时使用
[void]
和|
Out Null