• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

DBGrid双击问题

牧童027 2003-12-15 09:37:06
添加了DBGrid的双击事件后,Mouse只有点在非Cell的区域内才有效!?
我想知道Mouse双击Cell区域后会发生什么事件?
...全文
60 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xsen 2003-12-16
呵呵,若还不懂,详细请见Henry的专栏!
回复
xsen 2003-12-16
wd_318(饭加加)说得对,如果需要处理两种双击事件可看下面得方法!
1、首先定义变量: private DateTime gridMouseDownTime;
2、然后重写要点击的Cell的列的TextBox的MouseDown函数,如下为重写了第一和第列的cell双击响应:
DataGridTextBoxColumn aColumnTextColumn;
if ( i == 0 || i == 3 )
{
aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler);
}
3、再在MouseDown函数获取当前时间:
private void dgrd_SellTable_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//获取当前点击鼠标时的时间
DataGrid myGrid = (DataGrid)sender;
System.Windows.Forms.DataGrid.HitTestInfo myHitTest;
// Use the DataGrid control's HitTest method with the x and y properties.
myHitTest = this.dgrd_SellTable.HitTest(e.X,e.Y);
if ( myHitTest.Type == System.Windows.Forms.DataGrid.HitTestType.Cell )
gridMouseDownTime = DateTime.Now;
}

4、private void TextBoxMouseDownHandler(object sender, MouseEventArgs e )
{
//第一个判断条件:在单元格的textbox中的双击(即单击DataCell,使它获得焦点后,然后再响应该Cell中的双击事件)
//第二个判断条件:DataGrid 的 DoubleClick(直接双击Cell就响应双击事件,无须先单击Cell,使它获得焦点,然后再响应双击事件)
//判断时间间隔是否小于控制面板中所定义的双击间隔时间
if( e.Button == MouseButtons.Left && e.Clicks == 2 || DateTime.Now < gridMouseDownTime.AddMilliseconds(SystemInformation.DoubleClickTime))
//写你想做的事!
}
回复
simanh 2003-12-15
up
回复
wd_318 2003-12-15
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q869q
这儿有演示捕捉双击事件的程序
回复
wd_318 2003-12-15
对DataGrid的双击事件会成两种情况:
1、如果你双击的是你当前已经得到焦点的CELL,那么这个CELL内含的控件(一般默认的都是TextBox)会触发双击事件
2、如果你双击的不是已经得到焦点的CELL,那么这个双击是这样的:第一次点下,会触发DataGrid的Click事件,并使被点的格子取得焦点,第二次则是触发了这个CELL内含的控件(一般默认的都是TextBox)的Click事件.
回复
wincarf 2003-12-15
你要检测这个事件干什么呢,如果要获得双击的cell的值可以使用CurrentCellChanged,还有click这些事件啊,如果要捕获数据更改,要绑定datasource(如datatable的onrowchanged事件)之列的
回复
亚非 2003-12-15
自定义MouseDown事件,我的代码如下:
private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if((e.Button==MouseButtons.Left)&&(e.Clicks==2))
{
if(this.dataGrid1.CurrentCell.ColumnNumber!=-1)
{
MessageBox.Show(this.dataGrid1.CurrentCell.ToString());
}
}
}
回复
xsen 2003-12-15
up!遇到同样问题!高手快来解决啊
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-12-15 09:37
社区公告

让您成为最强悍的C#开发者