很急的问题,在线等解答,高手进!(WinForm)
最近遇到了一个问题: 点击数据使listview中对应的那个单元格选中并且使滚动条自动滚动到对应的位置。
我使用了EnsureVisible()方法,但是有个缺陷,它只支持垂直滚动条。
但是因为可能会有很多列,所以同样也需要水平滚动条能够自动滚动到对应的列
网上也看了很多,但是还是不是太清晰。所以请高手帮忙!!!
------解决方案--------------------listview本身只支持选中某一行的第一个列,既然你无法选中后面的列,你怎么让它焦点移动到那个位置呢?建议你更换控件,用DataGridView来实现,界面处理下,看上去和listview差不多的。
------解决方案--------------------需要这样做,windows也没有那样做
------解决方案--------------------C# code
listView1.Select();
listView1.Items[2].EnsureVisible();
SendKeys.Send("{RIGHT}{RIGHT}{RIGHT}{RIGHT}");
------解决方案--------------------
------解决方案--------------------
比较好的方法是#2楼qldsrx朋友建议的用DataGridView来实现。如果一定要用ListView,可以自己发LVM_SCROLL消息(会比较难修改和维护):
C# code
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);
------解决方案--------------------
------解决方案--------------------
通过设置选中实现不了吗?
------解决方案--------------------
用datagridview方便些,,建议楼主用datagridview,效果跟listview一样,,
------解决方案--------------------
listView1.View = View.Details
另外:
listView1.Left = 0 ;
listView1.Top = 0 ;
listView1.Dock = = System.Windows.Forms.DockStyle.Fill;
------解决方案--------------------
------解决方案--------------------
这种不太好再已有控件上实现的功能,最好是重新写一个控件
------解决方案--------------------
希望楼主能把你上下定位的程序也发出来,我最近也在找这方面的东西呢,让我也学习一下,谢谢了
------解决方案--------------------
------解决方案--------------------