在WinForm的DataGrid中双击一个DataGridCell怎样才能打开一个新窗口,在新窗口中传值给该DataGridCell,用什么事件可以实现啊?? 在WinForm的DataGrid中双击一个DataGridCell怎样才能打开一个新窗口,在新窗口中传值给该DataGridCell,用什么事件可以实现啊??请高手回答!!在线等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 double_click事件下,实例化新窗口,然后show() 貌似doubleclick方法不能用hittest搞定。关注中。 问题是DataGrid的Double_Click()事件中不能确认是哪个DataGridCell被双击了啊?请大家帮帮忙啊,这个问题困惑我几天了!!!! //DataGrid DobleClickprivate void dgaa_DoubleClick(object sender, System.EventArgs e){ BindingManagerBase bmb=BindingContext[myDataSet,"aa"]; m_a=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(0).ToString (); m_b=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(1).ToString (); m_c=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(2).ToString (); if(m_a=="aa") { frmAa frm_aa=new frmAa(this); frm_aa.ShowDialog(); } else if(m_a=="bb") { frmBb frm_bb=new frmBb(this); frm_bb.ShowDialog(); }}frmAa,frmBb 都继承自 FrmMain frmMain frm_min;public frmAa(frmMain frm){ // // Windows 窗体设计器支持所必需的 // InitializeComponent(); this.frm_main=frm; // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 //}m_a,m_b,m_c 属性 瞎建议一下,用两次单击模拟双击。用全局变量记录上次单击的时刻和cell。 我试了,但是如果是双击DataGrid的cell就不行哦,双击其他地方是可以的,高手在哪里? 双击貌似不行。可以用 currentsellchanged 方法实现类似单击的形式。不过不能点同一个单元格 有没有可以一次实现的方法?双击cell弹出新窗口 Nerver4Get() 兄台有没有qq号啊,我们以后经常交流! 首先要实现双击事件,用系统定义的间隔时间来判断;然后要画个窗体,参数的传递可以用static的值,或是用构造函数传入. 楼主的问题在于双击cell的第二下 click 被DataGridTextBoxColumn中的 textbox 接收了,datagrid不知道,当然除非你双击cell的边缘(毕竟textbox比cell要小一点点)。 所以即使使用了时间间隔来处理双击,也没鸟用。所以我认为需要重写DataGridTextBoxColumn,对TextBox的click事件进行处理。 怎么实现双击事件(针对DataGridCell)? 我想比较简单的是重载DataGridTextBoxColumn,给DataGridTextBoxColumn的TextBox(可以访问到)的doubleclick事件加处理,即弹出窗口等等。但和楼主要求可能会有些出入,要先单击选定一cell后,然后双击出此效果。 public DataTime gridMouseDownTime;//记录Mousedown发生在Cell的时间private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { DataGrid myGrid = (DataGrid)sender; System.Windows.Forms.DataGrid.HitTestInfo myHitTest; myHitTest = this.dataGrid1.HitTest(e.X,e.Y); if ( myHitTest.Type == System.Windows.Forms.DataGrid.HitTestType.Cell ) { gridMouseDownTime = DateTime.Now; } }//-------------------------------------------------------------------------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)) { if (this.dataGrid1.CurrentCell.ColumnNumber == 0)//假设双击第一列的Cell才响应事件 { Form2 newFrm = new Form2();//Form2为新窗体 newFrm.ShowDialog(); ........ //将新窗体的值传给dataGridCell SendKeys.Send("{Tab}"); //向活动应用程序发送Tab键,跳到下一控件(此处为下一格) } } }Form1(){InitializeComponent();//设置dataGridDataGridTableStyle ts = new DataGridTableStyle(); DataGridTextBoxColumn aColumnTextColumn;ts.MappingName = newTable.TableName;int numCols = newTable.Columns.Count; for (int i = 0;i< numCols;i++){aColumnTextColumn = new DataGridTextBoxColumn();if ( i == 0 ) { aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler); //响应事件 }}this.dataGrid1.TableStyles.Add(ts); } xlfeiyu() ( ) 信誉:100 给的代码好使吗?我试了一下,怎么捕捉布道aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler中去呢? 高速帮忙看看这是什么问题? 求一替换的正则表达式,谢谢! 高手请进,一个关于用户控件的问题 repeater div 显示问题 Lise<t>无法像DataSet那样绑定控件后自动变化,求解! 请问如何能读取一个TXT文件? DataGridView中添加了右键菜单 UrlEncode的问题 做单机的话,用access到底可以不? 关于开发打印服务器(如何让打pc端印文件先发送到服务器上) 定义Registry,RegistryKey 如何在web C#.net中动态创建datagrid
private void dgaa_DoubleClick(object sender, System.EventArgs e)
{
BindingManagerBase bmb=BindingContext[myDataSet,"aa"];
m_a=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(0).ToString ();
m_b=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(1).ToString ();
m_c=myDataSet.Tables["aa"].Rows[bmb.Position].ItemArray.GetValue(2).ToString (); if(m_a=="aa")
{
frmAa frm_aa=new frmAa(this);
frm_aa.ShowDialog();
}
else
if(m_a=="bb")
{
frmBb frm_bb=new frmBb(this);
frm_bb.ShowDialog();
}
}frmAa,frmBb 都继承自 FrmMain
frmMain frm_min;public frmAa(frmMain frm)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.frm_main=frm; //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}m_a,m_b,m_c 属性
用全局变量记录上次单击的时刻和cell。
可以用 currentsellchanged 方法实现类似单击的形式。不过不能点同一个单元格
然后要画个窗体,参数的传递可以用static的值,或是用构造函数传入.
所以我认为需要重写DataGridTextBoxColumn,对TextBox的click事件进行处理。
重载DataGridTextBoxColumn,
给DataGridTextBoxColumn的TextBox(可以访问到)
的doubleclick事件加处理,即弹出窗口等等。但和楼主要求可能会有些出入,要先单击选定一cell后,然后双击出此效果。
//记录Mousedown发生在Cell的时间
private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
DataGrid myGrid = (DataGrid)sender;
System.Windows.Forms.DataGrid.HitTestInfo myHitTest; myHitTest = this.dataGrid1.HitTest(e.X,e.Y);
if ( myHitTest.Type == System.Windows.Forms.DataGrid.HitTestType.Cell )
{
gridMouseDownTime = DateTime.Now;
}
}
//-------------------------------------------------------------------------
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))
{
if (this.dataGrid1.CurrentCell.ColumnNumber == 0)//假设双击第一列的Cell才响应事件
{
Form2 newFrm = new Form2();//Form2为新窗体
newFrm.ShowDialog();
........ //将新窗体的值传给dataGridCell
SendKeys.Send("{Tab}"); //向活动应用程序发送Tab键,跳到下一控件(此处为下一格)
}
}
}Form1()
{
InitializeComponent();
//设置dataGrid
DataGridTableStyle ts = new DataGridTableStyle();
DataGridTextBoxColumn aColumnTextColumn;
ts.MappingName = newTable.TableName;
int numCols = newTable.Columns.Count;
for (int i = 0;i< numCols;i++)
{
aColumnTextColumn = new DataGridTextBoxColumn();
if ( i == 0 )
{
aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler(TextBoxMouseDownHandler); //响应事件
}
}
this.dataGrid1.TableStyles.Add(ts);
}
给的代码好使吗?
我试了一下,怎么捕捉布道aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler中去呢?