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

datagrid

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="";
}
}
}

时间: 2024-11-02 08:25:32

捕捉DataGrid的双击事件(C#版本)的相关文章

急`在线等~如何把DataGrid中的DoubleClick双击事件点击标头响应改成点击行中随便那里都可以响应~~

问题描述 DoubleClick双击事件是需要双击标头才响应~如何改成双击DataGrid中数据行的随便那里都能响应 解决方案 解决方案二:声明~~是DataGridNODataGridView解决方案三:一般情况下DataGrid的单元格是不能相应DataGrid的双击事件的因为DataGrid的设计是单元格里面是一个TextBox来的,双击事件给TextBox控件截取了所以你只能给TextBox增加双击委托了(给每个DataGridTextBoxColumn列样式列的TextBox增加)解决

给DataGrid单元行添加双击事件

datagrid 现在我需要做到的功能是当我单击DataGrid某行时显示相对应选中的数据信息,在双击此相同行时弹出删除对话框,应该怎么做呢.由于单击问题很简单就不再阐述了,下面我说一下双击事件是怎么实现的. 这里用到了DataGrid的ItemDataBound事件,我们可以把下面的代码加入到所需的程序中就可实现双击的功能.详细源码如下: private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.

c++-在Qevent的双击事件中捕捉一个双击信号来执行槽函数,是否为同一个双击事件

问题描述 在Qevent的双击事件中捕捉一个双击信号来执行槽函数,是否为同一个双击事件 如 case QEvent::MouseButtonDblClick: { connect(xxxx,SIGNAL(dblclick()),yyyy,SLOT(fun()); } 那单次双击是否能执行这个槽函数呢 解决方案 case QEvent::MouseButtonDblClick: { connect(xxxx,SIGNAL(dblclick()),yyyy,SLOT(fun()); } 那单次双击是

easyui 但双击事件起效了,但是无法打开节点了

问题描述 我用easyui写了一个treegrid,想通过点击左边的treegrid,动态加载右边的数据.现在是不想行单击或者双击事件,tree是可以展开的,写了就没法展开了.希望各位达人帮忙解决!<tablestyle="height:390px"id="Dep_list"class="easyui-treegrid"data-options="url:'/OAManage/Ajax/GetDepInfo.ashx',rownu

自定义鼠标双击事件的缺陷及改善

鼠标 昨天晚上想写个鼠标双击事件,总感觉以前见过这个代码(最后想起来好象是JS里面的--)按习惯写了个onDbClick,发现居然不变色?!晕了,于是改onDoubleClick.onDouble--等等都不变色,FLASH难道没有定义这个事件?!气愤中,去查帮助,里面果然没有-- 然后就上来搜了闪吧里有关鼠标双击的帖子,一看N多啊,都是自己写函数实现的(再次气愤),不过还是HOLYBOZO的代码是最简洁的,于是拖下来用了.用的时候就发现问题了,只要在延迟以内,我狂点10次就触发了9次事件,而按

datagrid触发&amp;#106avascript事件

datagrid 触发javascript事件 public static void DG_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { LinkButton l=new LinkButton(); if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem

为.net中的ListBox控件添加双击事件

控件 我在用dotnet做一个项目的过程中,遇到了一个ListBox的问题:通过在一个ListBox中双击,把选中的项添加到另一个ListBox中,但ListBox控件本身并没有该事件,那么如何实现呢?我就想到了客户端脚本javascrit,通过查阅相关资料,终于把这个问题解决了,现在写出来与大家分享,希望能对大家有所帮助.        这里有三个问题:        第一:双击所要执行的javascript代码是什么?                    注意:javascript代码的语

DEV gridview如何捕获行双击事件

private void ViewHtlb_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left && e.Clicks == 2) // 判断是否是用鼠标双击 { DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo ghi = ViewHtlb.CalcHitInfo(new Point(e.X, e.Y)); if (ghi.InR

Silverlight开发中如何为Silverlight添加双击事件

在日常的开发中鼠标的事件是我们使用的最多的事件,但是在Silverlight中,只支持以下六种有限的鼠标事件:MouseEnter. MouseLeave.MouseLeftButtonDown.MouseLeftButtonUp.MouseMove.MouseWheel.这给我们的开发造成了不小的麻烦,还好 Silverlight支持强大的附加属性机制,这里就指导大家如何通过附加属性来给Silverlight添加鼠标的双击事件. 附加属性是Silverlight也是WPF中最具创新也是最强大的