listview 获取鼠标当前位置是第几列第几行

橘子皮... 2019-05-07 01:58:44
如果listview 有加载内容的话可以获取到,这个我知道
我的问题是如果listview 在没有加载内容时(网格模式有显示网格线),如何判断当前鼠标位置是几行几列呢??

...全文
692 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-05-07
  • 打赏
  • 举报
回复
引用 9 楼 橘子皮zzz 的回复:
[quote=引用 6 楼 水边2 的回复:]
没有内容你计算行列有什么用?
没内容就是要报错啊


鼠标在不同的列内右键导入不同的数据[/quote]
如果要导入数据 最起码每一个单元格得对应一个变量 不能是null 不行直接用字段补位吧
橘子皮... 2019-05-07
  • 打赏
  • 举报
回复
引用 6 楼 水边2 的回复:
没有内容你计算行列有什么用? 没内容就是要报错啊
鼠标在不同的列内右键导入不同的数据
橘子皮... 2019-05-07
  • 打赏
  • 举报
回复
引用 7 楼 OrdinaryCoder 的回复:
用的WPF winform 还是Web 程序种类不 一样 获取方式也有差别
就是net窗体程序,不是web
OrdinaryCoder 2019-05-07
  • 打赏
  • 举报
回复
用的WPF winform 还是Web 程序种类不 一样 获取方式也有差别
游北亮 2019-05-07
  • 打赏
  • 举报
回复
没有内容你计算行列有什么用? 没内容就是要报错啊
橘子皮... 2019-05-07
  • 打赏
  • 举报
回复
引用 3 楼 水边2 的回复:
listview的Click事件可以获取吧? 实在不行,在窗体的Click事件里,获取鼠标的x,y坐标,然后根据坐标获取所在位置的控件
坐标可以获取到,可是我只知道在listview有内容的时候,点击的地方是内容行之内的情况下用ListView1.GetItemAt和LI.SubItems.IndexOf(LI.GetSubItemAt())可以获取到行列,但是问题是ListView还没有内容的情况下获取不到,返回错误,通过xy坐标不知道怎么算出准确的行列数
橘子皮... 2019-05-07
  • 打赏
  • 举报
回复
引用 2 楼 OrdinaryCoder 的回复:
[quote=引用 1 楼 OrdinaryCoder 的回复:] 加一个click事件看一下
listview应该有鼠标移入和鼠标移出事件把 加上 看看参数e里有没有[/quote] e里获取不到行和列啊
desperaso 2019-05-07
  • 打赏
  • 举报
回复
改了改,再看看


。。。。。。
Area.Clear();
int get_x = 0;
foreach (ColumnHeader col in listView1.Columns)
{
Area.Add(new Rectangle(get_x, 0, col.Width, listView1.Height));
get_x += col.Width;
}
。。。。。。

游北亮 2019-05-07
  • 打赏
  • 举报
回复
listview的Click事件可以获取吧? 实在不行,在窗体的Click事件里,获取鼠标的x,y坐标,然后根据坐标获取所在位置的控件
OrdinaryCoder 2019-05-07
  • 打赏
  • 举报
回复
引用 1 楼 OrdinaryCoder 的回复:
加一个click事件看一下

listview应该有鼠标移入和鼠标移出事件把 加上 看看参数e里有没有
OrdinaryCoder 2019-05-07
  • 打赏
  • 举报
回复
加一个click事件看一下
desperaso 2019-05-07
  • 打赏
  • 举报
回复
引用 12 楼 橘子皮zzz 的回复:
你的代码没看懂,不过测试了下,结果不对,第012列对的,第3列就错了,箭头是我鼠标点的地方


就是取得全部ColumnHeader的宽度,换算位置,放进Rectangle数组里面,判断鼠标位置在哪个Rectangle里,
临时写的是不是位置换算不准。
如果每行高度为固定,判断鼠标位置,换算位置比较就可以取得行号。
橘子皮... 2019-05-07
  • 打赏
  • 举报
回复
引用 11 楼 desperaso 的回复:

List<Rectangle> Area = new List<Rectangle>();
        private void listView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button==MouseButtons.Right)
            {
                Area.Clear();
                int get_x = 0;
                foreach (ColumnHeader col in listView1.Columns)
                {
                    Area.Add(new Rectangle(get_x, 0, col.Width, listView1.Height));
                    get_x += get_x + col.Width;
                }

                var index = Area.FindIndex(a=>a.Contains(e.Location));
                if (index!=-1)
                {
                    MessageBox.Show(index + " 列.");
                }
            }
        }
同理,按高度位置取行
你的代码没看懂,不过测试了下,结果不对,第012列对的,第3列就错了,箭头是我鼠标点的地方
desperaso 2019-05-07
  • 打赏
  • 举报
回复

List<Rectangle> Area = new List<Rectangle>();
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button==MouseButtons.Right)
{
Area.Clear();
int get_x = 0;
foreach (ColumnHeader col in listView1.Columns)
{
Area.Add(new Rectangle(get_x, 0, col.Width, listView1.Height));
get_x += get_x + col.Width;
}

var index = Area.FindIndex(a=>a.Contains(e.Location));
if (index!=-1)
{
MessageBox.Show(index + " 列.");
}
}
}


同理,按高度位置取行

111,096

社区成员

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

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

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