转鼠标悬停在datagridview的某单元格,显示悬浮框效果http://www.cnblogs.com/Waming-zhen/archive/2012/06/12/2546472.html
来源:互联网 发布:php音乐分享网站源码 编辑:程序博客网 时间:2024/06/09 17:56
最近项目中需要增加一个新的功能,即当鼠标停在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_DGV11 {12 public partial class Form1 : Form13 {14 public Form1()15 {16 InitializeComponent();17 18 //Creat a DataTable19 DataTable dt = new DataTable("table1");20 21 //Add columns for DataTable22 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 DataTable30 //Initialize the row31 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 row43 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 else59 {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 OK62 {63 dataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = "QQ:563144545";//method one64 label2.Text ="QQ:563144545";//method two65 timer1.Enabled = true;66 }67 else68 {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.com/z/q312200791.htm?sp=4001
http://zhidao.baidu.com/question/305382667.html
不妥或欠缺之处,请指教!
0 0
- 转鼠标悬停在datagridview的某单元格,显示悬浮框效果http://www.cnblogs.com/Waming-zhen/archive/2012/06/12/2546472.html
- c#的迭代器,转自http://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html
- jQuery动态表格(转自:http://www.cnblogs.com/Zjmainstay/archive/2012/07/12/jQuery_autoAddDeleteTableTr.html)
- 一些在JAVA中获得文件夹路径的方法http://www.cnblogs.com/lostyue/archive/2011/06/27/2091686.html
- DataGridView取消点击列标题排序(转自:http://www.cnblogs.com/371448009/archive/2009/02/04/1383917.html)
- HTTP协议详解,转自http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html
- Linux的inode的理解 http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html
- 一个JavaScript的Hash类 http://www.cnblogs.com/fanrong/archive/2007/02/06/641556.html
- ASP.net的RUL重写http://www.cnblogs.com/hd/archive/2005/06/20/177633.html
- 超有营养的好博客http://www.cnblogs.com/me115/archive/2012/09/08/2676250.html
- 超有营养的好博客http://www.cnblogs.com/me115/archive/2012/09/08/2676250.html
- Android Fragment的使用http://www.cnblogs.com/xinye/archive/2012/08/28/2659712.html
- Linux进程调度的目标 http://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html
- http://www.cnblogs.com/hemingwang0902/archive/2012/03/15/2397761.html异常的解决方案
- 揭开Socket编程的面纱http://www.cnblogs.com/goodcandle/archive/2005/12/10/socket.html
- 转 CSS hack:针对IE6,IE7,firefox显示不同效果 (转:http://www.cnblogs.com/wschacker/archive/2008/01/21/1047328.html)
- IOS 字符串处理 转载来自:http://www.cnblogs.com/martin1009/archive/2012/06/07/2540123.html
- http://www.cnblogs.com/nankezhishi/archive/2012/06/09/getandpost.html
- 十四章--icloud技术--之二
- Unable to execute dex: Multiple dex files define 解决方法 (转)
- andengine背景滚动循环AutoParallaxBackground
- Git fetch和git pull的区别
- 图像处理基础(一)_图像的像素是什么?
- 转鼠标悬停在datagridview的某单元格,显示悬浮框效果http://www.cnblogs.com/Waming-zhen/archive/2012/06/12/2546472.html
- 测试
- OMAPL138学习---arm_call_dsp分析-
- android 4.0与android 2.3的变化
- 删除SVN用户信息
- Java Socket网络编程常见异常
- 输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
- 第二章 身份验证
- 【LeetCode】Maximum Depth of Binary Tree && Minimum Depth of Binary Tree