【问题标题】:Focus/Select ListView item in PowershellPowershell中的焦点/选择ListView项目
【发布时间】:2015-04-27 18:22:40
【问题描述】:

我在从 PowerShell 运行的窗口窗体中获得了一个 Listview 控件,该控件作为活动日志动态填充,我基本上希望它自动滚动,以便最后一个条目始终处于焦点。

我可以通过将项目设置为选中来使其与 ListBox 一起使用,但这似乎不适用于 ListView。我可以将它设置为 Selected 和 Focused,但只有当实际的表单控件是目标时,即使这样它也不会导致滚动条移动。

如果我可以让它在每次更新时滚动到页面底部会很好,但我更愿意真正关注特定项目,因为我有两个组,如果一个项目来自顶部会很好小组也可以集中注意力。

以下是部分代码

$listView1.View = 'Details'
$ListView1.Anchor = 'Top, Bottom, Left, Right'
$ListView1.Location = '0, 399'
$ListView1.Name = "ListView1"
$ListView1.Size = '683, 200'
$ListView1.TabIndex = 10
$listView1.FullRowSelect = $true
$listView1.MultiSelect = $False
$listColumnTime.Text = "Time"
$listColumnTime.Width = 90
$listColumnAction.Text = "Action"
$listColumnAction.Width = 100
$listColumnStatus.Text = "Status"
$listColumnStatus.Width = -2
$ListGroupUpdate.Header = "Updates"
$ListGroupUpdate.Tag = 0
$ListGroupAction.Header = "Actions"
$ListGroupAction.Tag = 1
$listView1.Columns.Add($listColumnTime)|Out-Null
$listView1.Columns.Add($listColumnAction)|Out-Null
$listView1.Columns.Add($listColumnStatus)|Out-Null
$listView1.Groups.Add($ListGroupUpdate)|Out-Null
$listView1.Groups.Add($ListGroupAction)|Out-Null

以及添加功能

function Add-ListViewItem
{
    Param( 
    [ValidateNotNull()]
    [Parameter(Mandatory=$true)]
    [System.Windows.Forms.ListView]$ListView,
    [Parameter(Mandatory=$true)]
    [string[]]$Items,
    [Parameter(Mandatory=$true)]
    [int]$Group,
    [Parameter(Mandatory=$false)]
    $timestamp = (get-date -Format "MM/dd HH:mm:ss"),
    [switch]$Clear)

    if($Clear)
    {
        $ListView1.Items.Clear();
    }
    $listitem = New-Object 'System.Windows.Forms.ListViewItem'
    $listitem.text = $Timestamp
    $listitem.Group = $listview.Groups[$group]
    $listitem.SubItems.AddRange($Items)
    $listitem.Selected = $true
    $ListView.Items.Add($listitem)
    $ListView.FocusedItem = $listitem
}

非常感谢您的帮助! BR埃里克

【问题讨论】:

    标签: winforms listview powershell scroll selected


    【解决方案1】:

    我会这样做。

    #Dll Import
    Function ScrollbarImport
    {
      Add-Type @"
      using System;
      using System.Runtime.InteropServices;
      public static class Scrollbar {
      [DllImport("user32.dll")]
      public static extern int GetScrollPos(IntPtr hWnd, int nBar);
      [DllImport("user32.dll")]
      public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
      [DllImport("user32.dll")]
      public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr     wParam, IntPtr lParam);
          }
    "@ 
    }
    

    保存滚动条的位置。

    $Script:ScrollbarX = [Scrollbar]::GetScrollPos($SQLProcessesListview.handle, 0)
    $Script:ScrollbarY = [Scrollbar]::GetScrollPos($SQLProcessesListview.handle, 1)
    

    设置保存位置。

    [Scrollbar]::SendMessage($SQLProcessesListview.Handle, 4116 ,(0 - [Int]$Script:ScrollbarX),(0 - [Int]$Script:ScrollbarY))
    [Scrollbar]::SendMessage($SQLProcessesListview.Handle, 4116 , [Int]$Script:ScrollbarX,([Int]$Script:ScrollbarY * 17))
    

    问候詹尼克

    【讨论】:

      猜你喜欢
      • 2018-09-18
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 2012-07-29
      • 2015-05-18
      • 1970-01-01
      相关资源
      最近更新 更多