苏州三木软件科技有限公司

 找回密码
 立即注册
搜索
热搜: 活动
查看: 2132|回复: 15

当鼠标移动到表格的某行时,在并不需要点击情况下突出...

[复制链接]

23

主题

42

帖子

166

积分

注册会员

Rank: 2

积分
166
发表于 2023-4-18 16:57:39 | 显示全部楼层 |阅读模式
当鼠标移动到表格的某行时,在并不需要点击情况下突出显示当前行?这个代码如何实现
回复

使用道具 举报

22

主题

296

帖子

1876

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1876
QQ
发表于 2023-4-18 17:37:41 | 显示全部楼层
这么骚的操作你确定要做?这个功能应该很耗系统资源,我觉得没有必要。
非要搞的话,可以参考下面的代码,在MouseMove事件写代码,注意要添加一个m_lastRow私有字段。

  1.   Private m_lastRow As Integer=-1
  2.                 Public Sub MouseMove(sender As Object,e As  System.Windows.Forms.MouseEventArgs)
  3.                         Dim tbl As BaseGrid=sender
  4.                         '获得HitTestInfo结构
  5.                         Dim hit As HitTestInfo= tbl.HitTest(e.X,e.Y)
  6.                         If hit.Row>=tbl.Rows.Fixed AndAlso hit.Row<>m_lastRow Then
  7.                                 '清空之前行的样式
  8.                                 If m_lastRow>0  AndAlso m_lastRow<tbl.Rows.Count-IIF(tbl.Footers.Fixed,1,0) Then '如果属于正常行序号
  9.                                         If TypeOf tbl Is SmEditTreeGrid Then
  10.                                                 tbl.Rows(m_lastRow).Style=Nothing
  11.                                         Else
  12.                                                 If tbl.Rows(m_lastRow).IsNode Then
  13.                                                         tbl.Rows(m_lastRow).Style=tbl.Styles("Subtotal" & tbl.Rows(m_lastRow).Node.Level)
  14.                                                 Else
  15.                                                         tbl.Rows(m_lastRow).Style=Nothing
  16.                                                 End If
  17.                                         End If
  18.                                 End If
  19.                                 
  20.                                 '设置新行的样式,也可以直接设置一个自己自定义的样式
  21.                                 tbl.Rows(hit.Row).Style=tbl.StyleCurrentLine
  22.                                 '保存一下作用过的行
  23.                                 m_lastRow=hit.Row
  24.                         End If
  25.                 End Sub
复制代码


回复

使用道具 举报

23

主题

42

帖子

166

积分

注册会员

Rank: 2

积分
166
 楼主| 发表于 2023-4-18 19:03:44 | 显示全部楼层
报错,如图...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

22

主题

296

帖子

1876

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1876
QQ
发表于 2023-4-18 19:11:20 | 显示全部楼层
你语法错误了,
tbl.Cols[e.Col].Name

下面的代码
if(strColName=="PurNO")
回复

使用道具 举报

23

主题

42

帖子

166

积分

注册会员

Rank: 2

积分
166
 楼主| 发表于 2023-4-18 20:06:25 | 显示全部楼层
admin 发表于 2023-4-18 17:37
这么骚的操作你确定要做?这个功能应该很耗系统资源,我觉得没有必要。
非要搞的话,可以参考下面的代码, ...

可以翻译下C#代码么?
回复

使用道具 举报

22

主题

296

帖子

1876

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1876
QQ
发表于 2023-4-18 21:00:43 | 显示全部楼层
要学会自己翻译代码的。介绍一个代码转换的网站:
https://converter.telerik.com/

  1. private int m_lastRow = -1;
  2. public void MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
  3. {
  4.     BaseGrid tbl = sender as BaseGrid;
  5.     // 获得HitTestInfo结构
  6.     C1.Win.C1FlexGrid.HitTestInfo hit = tbl.HitTest(e.X, e.Y);
  7.     if (hit.Row >= tbl.Rows.Fixed && hit.Row != m_lastRow)
  8.     {
  9.         // 清空之前行的样式
  10.         if (m_lastRow > 0 && m_lastRow<tbl.Rows.Count-(tbl.Footers.Fixed?1:0))
  11.         {
  12.             if (tbl is SmEditTreeGrid)
  13.                 tbl.Rows[m_lastRow].Style = null;
  14.             else if (tbl.Rows[m_lastRow].IsNode)
  15.                 tbl.Rows[m_lastRow].Style = tbl.Styles["Subtotal" + tbl.Rows[m_lastRow].Node.Level];
  16.             else
  17.                 tbl.Rows[m_lastRow].Style = null;
  18.         }
  19.         // 设置新行的样式,也可以直接设置一个自己自定义的样式
  20.         tbl.Rows[hit.Row].Style = tbl.StyleCurrentLine;
  21.         // 保存一下作用过的行
  22.         m_lastRow = hit.Row;
  23.     }
  24. }
复制代码


回复

使用道具 举报

23

主题

42

帖子

166

积分

注册会员

Rank: 2

积分
166
 楼主| 发表于 2023-4-19 08:34:20 | 显示全部楼层
代码错误

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

22

主题

296

帖子

1876

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1876
QQ
发表于 2023-4-19 08:49:06 | 显示全部楼层
看到错误提示,要学会自己判断代码应该如何修改的。

C1.Win.C1FlexGrid.HitTestlnfo hit=tbl.HitTest(e.X,e.Y);
回复

使用道具 举报

23

主题

42

帖子

166

积分

注册会员

Rank: 2

积分
166
 楼主| 发表于 2023-4-19 09:58:12 | 显示全部楼层
错误提示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

22

主题

296

帖子

1876

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1876
QQ
发表于 2023-4-19 10:10:53 | 显示全部楼层
tbl.Rows[m_lastRow].IsNode

VB.Net的代码在转C#语言的过程中,最常错的就是索引的括号类型。Vb.net都统一用()括号来解决,而C#()括号表示方法,[]方括号来表示索引,转换程序无法精准地识别VB.net中的()括号到底是方法还是索引,所以就统一不转换,这就需要我们自己在转换完成之后进行修改。有时候我忘记改或者没有改完全,你们需要自己识别并完成修改。这是基本技能,必须要掌握的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|苏州三木软件科技有限公司 ( 苏ICP备2022038390号 )

苏公网安备 32058502010732号

GMT+8, 2024-7-7 20:58 , Processed in 0.066046 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表