很急的问题,在线等解答,高手进!(WinForm)
最近遇到了一个问题: 点击数据使listview中对应的那个单元格选中并且使滚动条自动滚动到对应的位置。
我使用了EnsureVisible()方法,但是有个缺陷,它只支持垂直滚动条。
但是因为可能会有很多列,所以同样也需要水平滚动条能够自动滚动到对应的列
网上也看了很多,但是还是不是太清晰。所以请高手帮忙!!!
[解决办法]
listview本身只支持选中某一行的第一个列,既然你无法选中后面的列,你怎么让它焦点移动到那个位置呢?建议你更换控件,用DataGridView来实现,界面处理下,看上去和listview差不多的。
[解决办法]
需要这样做,windows也没有那样做
[解决办法]
listView1.Select(); listView1.Items[2].EnsureVisible(); SendKeys.Send("{RIGHT}{RIGHT}{RIGHT}{RIGHT}");
[解决办法]
void EnsureColumnVisible(ColumnHeader column){ if (column.ListView.Scrollable && column.ListView.IsHandleCreated) { const int SB_HORZ = 0, LVM_SCROLL = 0x1014; int currentPos = GetScrollPos(column.ListView.Handle, SB_HORZ); int columnLeft = column.ListView.Columns.OfType<ColumnHeader>().Where(c => c.Index < column.Index).Sum(c => c.Width); int shift = 0; if (columnLeft + column.Width - currentPos > column.ListView.ClientRectangle.Width ) { shift = columnLeft + column.Width - column.ListView.ClientRectangle.Width - currentPos; } else if (columnLeft - currentPos < 0) { shift = columnLeft - currentPos; } SendMessage(column.ListView.Handle, LVM_SCROLL, (IntPtr)(shift), IntPtr.Zero); }}[DllImport("user32.dll", SetLastError=true)]static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);[DllImport("user32.dll", SetLastError = true)]static extern int GetScrollPos(IntPtr hWnd, int nBar);
[解决办法]