C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果
最近项目中需要增加一个新的功能,即当鼠标停在Datagridview的某一单元格时,如果该单元格的内容是需要显示说明的,就显示一个悬浮框对其中的数据进行解析说明,在网上查了下,主要有两种方法:
方法一,使用一个label控件,通过设置label的visible属性来进行显示和隐藏;
方法二,使用datagridview的ToolTipText属性。
以下是我用于测试的代码:
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9
10 namespace zhen_DGV
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17
18 // Creat a DataTable
19 DataTable dt = new DataTable( " table1 " );
20
21 // Add columns for DataTable
22 dt.Columns.Add( " ID " );
23 dt.Columns.Add( " Name " );
24 dt.Columns.Add( " Age " );
25
26 DataColumn dc = new DataColumn( " Sex " );
27 dt.Columns.Add(dc);
28
29 /// Add rows for DataTable
30 // Initialize the row
31 DataRow dr = dt.NewRow();
32 dr[ " ID " ] = " 563 " ;
33 dr[ " Name " ] = " 545 " ;
34 dt.Rows.Add(dr);
35
36 DataRow drr = dt.NewRow();
37 object [] objs = { 144 , " QQ " };
38 drr.ItemArray = objs;
39 dt.Rows.Add(drr);
40
41 dataGridView1.DataSource = dt;
42 DataRow drrr = dt.NewRow(); // Add new row
43 dt.Rows.Add(drrr);
44 }
45
46 private void dataGridView1_MouseMove( object sender, MouseEventArgs e)
47 {
48 label2.Location = new Point(e.X + 20 , e.Y + 100 );
49 }
50
51 private void dataGridView1_CellMouseEnter( object sender, DataGridViewCellEventArgs e)
52 {
53 if (e.ColumnIndex < 0 || e.RowIndex < 0 )
54 {
55 label2.Visible = false ;
56 return ;
57 }
58 else
59 {
60 if ((dataGridView1[ 0 ,e.RowIndex].Value.ToString() == " 144 " ) && (e.ColumnIndex == 1 ))
61 // if (dataGridView1[e.ColumnIndex,e.RowIndex].Value.ToString() == "QQ") // this way is OK
62 {
63 dataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = " QQ:563144545 " ; // method one
64 label2.Text = " QQ:563144545 " ; // method two
65 timer1.Enabled = true ;
66 }
67 else
68 {
69 label2.Visible = false ;
70 timer1.Enabled = false ;
71 }
72 }
73 }
74
75 private void timer1_Tick( object sender, EventArgs e)
76 {
77 label2.Visible = true ;
78 }
79 }
80 }
但在测试的过程中发现,如果列表中有新的新行显示的话,鼠标移动到新行会出现异常“未将对象引用设置到对象的实例。”。调试时发现是
dataGridView1[ 0 ,e.RowIndex].Value = null引起的,目前还没有找到解决的办法,所以我在使用时时不显示新行的,即设置
datagridview.AllowUserToAddRows = false。
说明:
对于方法一,我使用dataGridView1_MouseMove(object sender, MouseEventArgs e)方法来定位label的显示坐标,使用timer1来延迟label的显示。
在两种方法中都是用了dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)方法对鼠标所在单元格的内容进行读取判断。
参考内容:
http://wenwen.soso测试数据/z/q312200791.htm?sp=4001
http://zhidao.baidu测试数据/question/305382667.html
不妥或欠缺之处,请指教!
标签: C# , datagridview
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于C# 鼠标悬停在datagridview的某单元格,显示悬浮框效果的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did48829