listView1.SelectedItems[0].IndexlistView1.SelectedItems[0].SubItems[0]

解决方案 »

  1.   

    我是说当鼠标被点击时可以取得子项,使用什么事件或者其他的什么途径可以取得所点击的子项,
    我们已经知道使用getItemAt方法可以取得Item但是却得不到子项。
      

  2.   

    每个ListItem都有个Tag属性,可以好好利用一下。
      

  3.   

    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 );
    }
      

  4.   

    这种方法在有些情况下可行的,但是如果,可以listview较长,需要拖动水平滚动条的话就有麻烦了
      

  5.   

    并且,listview的click事件的响应在点击子项的时候并没有发生,只有在点击项的时候才发生。
      

  6.   

    那就使用mousedown+mouseup事件,具体为mousedown时记录mousepoint,mouseup时判断是否同一点,如果是同一点,//相当于mouseclick
      

  7.   

    看看这个可以成功不。
    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