怎样能够取得鼠标点击的listview的子项呢?请大家给下启发,up有分

herony420 2004-11-15 11:50:04
如题,我想让用户点击listview的某个项(item)的子项(subitem)的时候,做一些事情,怎样可以知道用户点击的子项呢?
请大家帮忙给各启发
...全文
274 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡蓝色2 2004-11-15
  • 打赏
  • 举报
回复
用hitTest方法
roarlion 2004-11-15
  • 打赏
  • 举报
回复
判断子项的text
herony420 2004-11-15
  • 打赏
  • 举报
回复
我是说当鼠标被点击时可以取得子项,使用什么事件或者其他的什么途径可以取得所点击的子项,
我们已经知道使用getItemAt方法可以取得Item但是却得不到子项。
cnhgj 2004-11-15
  • 打赏
  • 举报
回复
listView1.SelectedItems[0].Index

listView1.SelectedItems[0].SubItems[0]
zzcwhq 2004-11-15
  • 打赏
  • 举报
回复
NO.1
OneDotRed 2004-11-15
  • 打赏
  • 举报
回复
看看这个可以成功不。
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
jimh 2004-11-15
  • 打赏
  • 举报
回复
那就使用mousedown+mouseup事件,具体为mousedown时记录mousepoint,mouseup时判断是否同一点,如果是同一点,//相当于mouseclick
flcandclf 2004-11-15
  • 打赏
  • 举报
回复
ding
herony420 2004-11-15
  • 打赏
  • 举报
回复
并且,listview的click事件的响应在点击子项的时候并没有发生,只有在点击项的时候才发生。
herony420 2004-11-15
  • 打赏
  • 举报
回复
这种方法在有些情况下可行的,但是如果,可以listview较长,需要拖动水平滚动条的话就有麻烦了
OneDotRed 2004-11-15
  • 打赏
  • 举报
回复
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 );
}
yufeng777 2004-11-15
  • 打赏
  • 举报
回复
UP
sneak 2004-11-15
  • 打赏
  • 举报
回复
每个ListItem都有个Tag属性,可以好好利用一下。
内容概要:本文档是2025年全国广播电视技术能手竞赛IPTV专业的竞赛内容大纲,旨在指导参赛选手准备比赛。竞赛分为理论和实操两大部分。理论部分涵盖基本知识、基础理论和专业知识,包括法律法规、技术标准、IPTV技术基础、信号传输与分发、网络和数据安全等。实操部分则涉及IPTV系统设备、仪器设备的操作使用和指标测量。具体内容包括IPTV系统架构、传输技术与指标、设备配置及维护、专业技能如测量工具使用、视音频指标测量、直播点播协议分析、播出网络性能测量、网络安全数据分析以及系统故障排查等。 适合人群:从事或有意从事IPTV相关工作的技术人员,尤其是有志于参加全国广播电视技术能手竞赛的专业人士。 使用场景及目标:①帮助参赛选手全面了解并掌握IPTV相关的法规文件和技术标准;②提升选手对IPTV系统架构、传输技术和设备配置的理解;③增强选手在实际操作中的测量、分析和故障排查能力;④确保选手能够熟练运用各种测量工具和分析软件进行视音频指标测量和网络安全数据分析。 阅读建议:由于文档内容详尽且专业性强,建议读者在学习过程中结合实际案例和操作练习,同时参考相关技术文献,以便更好地理解和掌握竞赛所需的知识和技能。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧