移动 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;
}
几周来我一直在尝试理解 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;
}