DBGrid双击问题

牧童027 2003-12-15 09:37:06
添加了DBGrid的双击事件后,Mouse只有点在非Cell的区域内才有效!?
我想知道Mouse双击Cell区域后会发生什么事件?
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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!遇到同样问题!高手快来解决啊

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧