listview_Click( sender , e ) { Point p = MousePosition; p = listView1.PointToClient( p ); ListViewItem item = listview.GetItemAt( p.X , p.Y ); //得到鼠标在listview显示区域的相对点 if ( item == null ) return; //在listview中,subitem没有宽度设置,我查了查,1.1的ListView也没有设置subitem的方法, //而在2.0的版本,有个internal的方法叫GetSubItemRect,可以使用反射去调用。呵呵,不过天无绝人之路,办法是有的,通过发送消息?好在listview的column还是有宽度的。OK
int width = p.x; //当前点在listview上的x坐标,也就是“宽度”啦 int index = 0; int sum = 0; for( int i = 0 ; i < listview.Columns.Count ; i++ ) { sum+=listview.Columns[ i ].Width; if ( sum >= width ) { index = i; break; } }MessageBox.Show( item.SubItems[ index ].Text ); }
Rectangle rect = listView1.GetItemRect( item.Index );
int offset = 0; if ( listView1.ClientRectangle.Width < rect.Width ) //如果发生了水平滚动 { offset = rect.Left ; }
int width = p.X - offset ; int index = 0; int sum = 0; for( int i = 0 ; i < listView1.Columns.Count ; i++ ) { sum+=listView1.Columns[ i ].Width; if ( sum >= width ) { index = i; break; } } MessageBox.Show( item.SubItems[ index ].Text ); } ============================== 并且,listview的click事件的响应在点击子项的时候并没有发生,只有在点击项的时候才发生。to:herony420(尽头) ,你需要将listview设为FullRowSelect,并且View为Details
我们已经知道使用getItemAt方法可以取得Item但是却得不到子项。
{
Point p = MousePosition;
p = listView1.PointToClient( p );
ListViewItem item = listview.GetItemAt( p.X , p.Y ); //得到鼠标在listview显示区域的相对点 if ( item == null )
return; //在listview中,subitem没有宽度设置,我查了查,1.1的ListView也没有设置subitem的方法,
//而在2.0的版本,有个internal的方法叫GetSubItemRect,可以使用反射去调用。呵呵,不过天无绝人之路,办法是有的,通过发送消息?好在listview的column还是有宽度的。OK
int width = p.x; //当前点在listview上的x坐标,也就是“宽度”啦
int index = 0;
int sum = 0;
for( int i = 0 ; i < listview.Columns.Count ; i++ )
{
sum+=listview.Columns[ i ].Width;
if ( sum >= width )
{
index = i;
break;
}
}MessageBox.Show( item.SubItems[ index ].Text );
}
private void listView1_Click(object sender, System.EventArgs e)
{
Point p = MousePosition; p = listView1.PointToClient( p );
ListViewItem item = listView1.GetItemAt( p.X , p.Y );
if ( item == null )
return;
Rectangle rect = listView1.GetItemRect( item.Index );
int offset = 0; if ( listView1.ClientRectangle.Width < rect.Width ) //如果发生了水平滚动
{
offset = rect.Left ;
}
int width = p.X - offset ;
int index = 0;
int sum = 0;
for( int i = 0 ; i < listView1.Columns.Count ; i++ )
{
sum+=listView1.Columns[ i ].Width;
if ( sum >= width )
{
index = i;
break;
}
}
MessageBox.Show( item.SubItems[ index ].Text ); }
==============================
并且,listview的click事件的响应在点击子项的时候并没有发生,只有在点击项的时候才发生。to:herony420(尽头) ,你需要将listview设为FullRowSelect,并且View为Details