移动 listView 磁贴?

Shift listView tiles?

几周来我一直在尝试理解 c#.net 中的平铺 listView,但没有成功。

我已将表单的 height/width (154x154) 缩小到与我的 listView(停靠在 form2 中)中的图片(带图片的项目)相同的图块大小;当显示我的 form2 时,您会在 listView 中看到 item[0]...就是这样! (到目前为止我想要的,太棒了!)

我已将可滚动 属性 设置为 false 以消除两个滚动条(到目前为止工作得很好...)

我已经在全局范围内连接了左右箭头键(因为它已经过彻底调试,所以可以正常工作)并且在单击右箭头键时,它应该垂直调出项目 [1],以此类推。

向左箭头键会弹出上一个项目,直到它达到 0。

我尝试了以下方法,但没有任何效果。

private void HotkeyHandler(int i)
    {
        {
            if (this.listView1.InvokeRequired)
            {
                SetHotkeyCallback p = new SetHotkeyCallback(HotkeyHandler);
                this.Invoke(p, new object[] { i });
            }
            else
            {
                switch (i)
                {
                    case 1:
                        listView1.View = View.List;

                        if (listView1.TopItem.Index > 0)
                        {
                            listView1.TopItem = listView1.Items[listView1.TopItem.Index - 1];
                        }

                        listView1.View = View.Tile;
                        break;

                    case 2:
                        listView1.View = View.List;

                        if (listView1.TopItem.Index < listView1.Items.Count)
                        {
                            listView1.TopItem = listView1.Items[listView1.TopItem.Index + 1];
                        }

                        listView1.View = View.Tile;
                        break;
                }
            }
        }
    }

请帮助我,我已经疯了几个星期了。

编辑:上面函数中的开关确实关闭了,我已经调试过了;因此,问题不在于调用...

我认为你不能直接这样做。

摆脱ScrollBars的方法确实是设置Scrollable = false;。 但这就是它所说的:现在 ListView 不会 滚动。

以下是许多滚动问题的常见解决方法: 将 Listview 放在 Panel 中并使其尽可能大以显示所有 Items.

然后为了简单地滚动移动 LV 上下:

private void prepare_Click_1(object sender, EventArgs e)
{
    // we sit inside a Panel
    listView1.Parent = panel1;
    // initially they have the same size
    listView1.Size = panel1.Size;
    listView1.Location = Point.Empty;
    // a few test items
    for (int i = 0; i < 100; i++)
        listView1.Items.Add("Item " + i);
    // now grow the height to display all items:
    int cols = listView1.Width / listView1.TileSize.Width;
    listView1.Height = (listView1.Items.Count / cols) * listView1.TileSize.Height;
}

// moving the LV up looks like scrolling down..
private void scrollDown_Click(object sender, EventArgs e)
{
    listView1.Top -= listView1.TileSize.Height;
    if (listView1.Bottom < panel1.Height) 
        listView1.Top = -listView1.Height + panel1.Height;
}


// moving the LV down looks like scrolling up..
private void scrollUp_Click_1(object sender, EventArgs e)
{
    listView1.Top += listView1.TileSize.Height;
    if (listView1.Top > 0) listView1.Top = 0;
}