在WinForm的DataGrid中双击一个DataGridCell怎样才能打开一个新窗口,在新窗口中传值给该DataGridCell,用什么事件可以实现啊??请高手回答!!在线等

解决方案 »

  1.   

    double_click事件下,实例化新窗口,然后show()
      

  2.   

    貌似doubleclick方法不能用hittest搞定。关注中。
      

  3.   

    问题是DataGrid的Double_Click()事件中不能确认是哪个DataGridCell被双击了啊?请大家帮帮忙啊,这个问题困惑我几天了!!!!
      

  4.   

    //DataGrid DobleClick
    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 属性
      

  5.   

    瞎建议一下,用两次单击模拟双击。
    用全局变量记录上次单击的时刻和cell。
      

  6.   

    我试了,但是如果是双击DataGrid的cell就不行哦,双击其他地方是可以的,高手在哪里?
      

  7.   

    双击貌似不行。
    可以用 currentsellchanged 方法实现类似单击的形式。不过不能点同一个单元格
      

  8.   

    有没有可以一次实现的方法?双击cell弹出新窗口
      

  9.   

    Nerver4Get() 兄台有没有qq号啊,我们以后经常交流!
      

  10.   

    首先要实现双击事件,用系统定义的间隔时间来判断;
    然后要画个窗体,参数的传递可以用static的值,或是用构造函数传入.
      

  11.   

    楼主的问题在于双击cell的第二下 click 被DataGridTextBoxColumn中的 textbox 接收了,datagrid不知道,当然除非你双击cell的边缘(毕竟textbox比cell要小一点点)。 所以即使使用了时间间隔来处理双击,也没鸟用。
    所以我认为需要重写DataGridTextBoxColumn,对TextBox的click事件进行处理。
      

  12.   

    怎么实现双击事件(针对DataGridCell)?
      

  13.   

    我想比较简单的是
    重载DataGridTextBoxColumn,
    给DataGridTextBoxColumn的TextBox(可以访问到)
    的doubleclick事件加处理,即弹出窗口等等。但和楼主要求可能会有些出入,要先单击选定一cell后,然后双击出此效果。
      

  14.   

    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();
    //设置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);
    }
      

  15.   

    xlfeiyu() ( ) 信誉:100 
    给的代码好使吗?
    我试了一下,怎么捕捉布道aColumnTextColumn.TextBox.MouseDown += new MouseEventHandler中去呢?