0

如何更改 ListBox 中“概述”的项目?请参阅以下屏幕截图以进行说明:

截图展示了我所说的“概述”项目而不是“选定”项目

背景:我想要一个正常工作的标准多选列表框。不幸的是,Windows 窗体列表框(带有SelectionMode.MultiExtended)功能不完整。缺少的功能是它不允许您使用 Ctrl+箭头键和 Ctrl+Space 选择一组不相交的项目。(在 Windows 资源管理器中试一试,看看它应该如何工作。)我正在尝试继承 ListBox 并添加这个缺失的功能。为此,我打算在OnKeyDown受保护的方法中响应 Ctrl+箭头键,但为了做到这一点,我需要能够在不更改所选项目集的情况下移动轮廓。我怎么做?

4

1 回答 1

2

您可以通过将LB_SETCARETINDEX消息发送到列表框来做到这一点:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern uint SendMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam);

public const uint LB_SETCARETINDEX = 0x019E;
public const uint LB_GETCARETINDEX = 0x019F;

[...]

public int OutlineIndex
{
    get
    {
        return (int) WinAPI.SendMessage(Handle, WinAPI.LB_GETCARETINDEX, 0, 0);
    }
    set
    {
        if (value < 0 || value >= Items.Count)
            throw new ArgumentException("OutlineIndex cannot be negative or greater than the size of the collection.", "value");
        WinAPI.SendMessage(Handle, WinAPI.LB_SETCARETINDEX, (uint) value, 0);

    }
}
于 2011-01-06T18:04:10.653 回答