捕捉DataGrid的双击事件(C#版本)

该博客展示了一个用 C# 实现的 DataGrid 鼠标双击事件示例。代码创建了 DataSet 和 DataTable,进行数据绑定和样式添加,为 TextBox 列添加鼠标事件处理器,当鼠标双击时弹出消息框显示双击的值,还处理了鼠标按下等事件。
原文:http://blog.youkuaiyun.com/abaowu/archive/2004/09/13/103008.aspx
?
namespace DataGridDoubleClick
{
	using System;
	using System.Drawing;
	using System.Collections;
	using System.ComponentModel;
	using System.Windows.Forms;
	using System.Data;

	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.DataGrid dataGrid1;
		private DataSet myDataSet;
		DateTime gridMouseDownTime;
    private System.Windows.Forms.Label label1;
		
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			InitializeComponent();
			gridMouseDownTime = DateTime.Now;
			SetUp();
		}

		private void SetUp()
		{
			// 用2个Table和1和Relation创建DataSet
			MakeDataSet();
			// 数据绑定
			dataGrid1.SetDataBinding(myDataSet, "Customers");

			//添加样式
			AddCustomDataTableStyle();
		}

		private void MakeDataSet()
		{
			// 创建DataSet.
			myDataSet = new DataSet("myDataSet");
	      
			// 创建2个DataTables.
			DataTable tCust = new DataTable("Customers");
			
			// 创建两个列,并添加到第一个表
			DataColumn cCustID = new DataColumn("custID");
			DataColumn cCustName = new DataColumn("custName");
			DataColumn cCurrent = new DataColumn("custCity");
			tCust.Columns.Add(cCustID);
			tCust.Columns.Add(cCustName);
			tCust.Columns.Add(cCurrent);

			// 把tables添加到DataSet.
			myDataSet.Tables.Add(tCust);
			
	   
			/* 计算tables.对每个客户,创建DataRow变量 */
			DataRow newRow1;
			
			// 添加记录到 Customers Table.
			for(int i = 1; i < 4; i++)
			{
				newRow1 = tCust.NewRow();
				newRow1["custID"] = (100*i).ToString();
				tCust.Rows.Add(newRow1);
			}

			tCust.Rows[0]["custName"] = "【孟宪会之精彩世界】";
			tCust.Rows[1]["custName"] = "net_lover";
			tCust.Rows[2]["custName"] = "http://xml.sz.luohuedu.net/";


			tCust.Rows[0]["custCity"] = "北京";
			tCust.Rows[1]["custCity"] = "上海";
			tCust.Rows[2]["custCity"] = "河南";
		}

		private void AddCustomDataTableStyle()
		{
			DataGridTableStyle ts1 = new DataGridTableStyle();
			ts1.MappingName = "Customers";
			// 设置属性
			ts1.AlternatingBackColor = Color.LightGray;

			// 添加Textbox列样式,以便我们捕捉鼠标事件
			DataGridTextBoxColumn TextCol = new DataGridTextBoxColumn();
			TextCol.MappingName = "custID";
			TextCol.HeaderText = "序号";
			TextCol.Width = 100;

			//添加事件处理器
			TextCol.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler);
			TextCol.TextBox.DoubleClick += new EventHandler(TextBoxDoubleClickHandler);
			ts1.GridColumnStyles.Add(TextCol);

			TextCol = new DataGridTextBoxColumn();
			TextCol.MappingName = "custName";
			TextCol.HeaderText = "姓名";
			TextCol.Width = 100;
			//添加事件处理器
			TextCol.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler);
			TextCol.TextBox.DoubleClick += new EventHandler(TextBoxDoubleClickHandler);
			ts1.GridColumnStyles.Add(TextCol);

			TextCol = new DataGridTextBoxColumn();
			TextCol.MappingName = "custCity";
			TextCol.HeaderText = "地址";
			TextCol.Width = 100;
			//添加事件处理器
			TextCol.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler);
			TextCol.TextBox.DoubleClick += new EventHandler(TextBoxDoubleClickHandler);
			ts1.GridColumnStyles.Add(TextCol);
		
				dataGrid1.TableStyles.Add(ts1);
			
		}

		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		private void InitializeComponent()
		{
      this.dataGrid1 = new System.Windows.Forms.DataGrid();
      this.label1 = new System.Windows.Forms.Label();
      ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
      this.SuspendLayout();
      // 
      // dataGrid1
      // 
      this.dataGrid1.CaptionBackColor = System.Drawing.SystemColors.Info;
      this.dataGrid1.CaptionForeColor = System.Drawing.SystemColors.WindowText;
      this.dataGrid1.CaptionVisible = false;
      this.dataGrid1.DataMember = "";
      this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
      this.dataGrid1.Location = new System.Drawing.Point(11, 9);
      this.dataGrid1.Name = "dataGrid1";
      this.dataGrid1.Size = new System.Drawing.Size(368, 144);
      this.dataGrid1.TabIndex = 0;
      this.dataGrid1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.dataGrid1_MouseDown);
      // 
      // label1
      // 
      this.label1.Location = new System.Drawing.Point(4, 166);
      this.label1.Name = "label1";
      this.label1.Size = new System.Drawing.Size(383, 23);
      this.label1.TabIndex = 1;
      this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.label1.Click += new System.EventHandler(this.Form1_Click);
      // 
      // Form1
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(387, 201);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                  this.label1,
                                                                  this.dataGrid1});
      this.Name = "Form1";
      this.Text = "鼠标双击事件的例子";
      ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
      this.ResumeLayout(false);

    }
		#endregion

		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void TextBoxDoubleClickHandler(object sender, EventArgs e)
		{
			MessageBox.Show("双击事件发生。鼠标双击到的值:"+((TextBox)sender).Text.ToString());
		}

		private void TextBoxMouseDownHandler(object sender, MouseEventArgs e)
		{
			if(DateTime.Now < gridMouseDownTime.AddMilliseconds(SystemInformation.DoubleClickTime))
			{
			  MessageBox.Show("双击事件发生。鼠标双击到的值:"+((TextBox)sender).Text.ToString());
			}
			label1.Text = "TextBox 鼠标按下了。  ";
		}

		private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			gridMouseDownTime = DateTime.Now;
			label1.Text = "DataGrid1 鼠标按下了。  ";
		}

    private void Form1_Click(object sender, System.EventArgs e)
    {
      label1.Text="";
    }
    private void label1_Click(object sender, System.EventArgs e)
    {
      label1.Text="";
    }
	}
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值