读书人

winform下datagrid双击有关问题

发布时间: 2012-01-07 21:41:55 作者: rapoo

winform下datagrid双击问题
在winform下,我的程序现在只能靠点击datagrid 的窗体触发dataGrid1_DoubleClick(object sender, System.EventArgs e)事件,请问要怎么样才能在双击绑定到datagrid中的某一行数据的时候触发这个双击事件????请朋友们帮忙看看?谢谢

[解决办法]
在生成数据行的时候重新绑定事件——其实没有必要,直接操作有什么不好呢??

而且代码简单,操作方便的
[解决办法]
选定一行.
加上鼠标事件:
private void imageShow_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Drawing.Point pt = new Point(e.X, e.Y);
DataGrid.HitTestInfo hti = this.imageShow.HitTest(pt);
if(hti.Type == DataGrid.HitTestType.Cell)
{
this.imageShow.CurrentCell = new DataGridCell(hti.Row, hti.Column);
this.imageShow.Select(hti.Row);
}
}

鼠标双击事件:
private void imageShow_DoubleClick(object sender, System.EventArgs e)
{
//int y = imageShow.CurrentCell.ColumnNumber;
int x = imageShow.CurrentCell.RowNumber;
MessageBox.Show(imageShow[x,0].ToString());
}


就这样就可以,触发双击事件,

[解决办法]
在生成数据行的时候重新绑定事件——其实没有必要,直接操作有什么不好呢??

而且代码简单,操作方便的


[解决办法]
LS两为说得也是,,,不用绑定...
[解决办法]
捕捉DataGrid的双击事件
http://dotnet.aspx.cc/article/c83c3a4b-8571-4ce6-fbac-35dc28d14389/read.aspx
[解决办法]
其实private void imageShow_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)

是一章眼法...
LZ可以直接用
private void imageShow_DoubleClick(object sender, System.EventArgs e)

看看能不能得到,
[解决办法]
Double_Click事件里,对当前活动的行或列进行处理不行吗?
[解决办法]
程序没有问题的啊

LZ把双击事件改为其他的试试..
是不是出了什么问题
[解决办法]
this.dataGrid1.CurrentCell.RowNumber
this.dataGrid1.CurrentCell.ColumnNumber
看看这两个属性能不能得到当前点击的行,列号。
[解决办法]
二 捕获DataGrid里的双击事件,本来很简单的问题,可是如果你只对DataGrid的DoubleClicked里写程序的话,你就会发现一个问题,在DataGrid的cell里双击时没有反应,这是因为在DataGrid里有TextBox组成,所以你就需要捕获TextBox的DoubleClicked事件,但你完成这一步时,看看效果咋样,如果你仔细的话,你就又会发现一个问题,当光标还没有在一个单元格时,双击该单元格,发现了什么?没有任何反应,明明双击了吗,为啥呢?这是因为DataGrid把这个双击操作分解了,分为两个单击,第一个使该单元格获得光标,第二个为单击事件,所以你的双击就没有反应了,所以我们要做的就是把这个动作当作双击事件来处理,这样就达到我们的目的了。所以捕获一个双击事件就要做三件事。下面是一段代码。

第一步:

private void dgRole_DoubleClick(object sender,System.EventArgs e)

//dgRole为DataGrid



{

this.frmRoleRightShow(); //我们双击要做的事

}

第二步:

private void TextBox_DoubleClick(object sender,System.EventArgs e)

{

this.frmRoleRightShow();

}

第三步:

DateTime gridMouseDownTime;

private void dgRole_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)

{



gridMouseDownTime=DateTime.Now; //纪录时间

}

private void TextBox_MouseDown(object sender,MouseEventArgs e)

{

if(DateTime.Now < gridMouseDownTime.AddMilliseconds(SystemInformation.DoubleClickTime))

//如果两次单击的时间小于系统的双击时间,我们就把它认为是双击操作

{

this.frmRoleRightShow();

}

}

读书人网 >C#

热点推荐