1.你可以在mouseup事件中编码
2.没用过
3.就是触发doubleclick事件呀。datagrid有这个事件呀

解决方案 »

  1.   

    1、你需要通过设置DataGridTableStyle以及里面的DataGridColumnStyle,得到那个Column的TextBox,为他添加一个Click/MouseDown/MouseUp事件2、CurrentCellChanged事件3、同1
      

  2.   

    using System;
    using System.Data;
    using System.Drawing;
    using System.Windows.Forms;namespace TryScan
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    internal class Styler
    {
    //        private int iStart, iLast;
    //        private bool bUnselecting;
    private Styler()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
            
            static public void ChangeStyle(DataGrid dg)
            {
                ChangeStyle(dg, true, null, null, null);
            }        static public void ChangeStyle(DataGrid dg, bool Selectable)
            {
                ChangeStyle(dg, Selectable, null, null, null);
            }        static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly)
            {
                ChangeStyle(dg, Selectable, ReadOnly, null, null);
            }        static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating)
            {
                ChangeStyle(dg, Selectable, ReadOnly, Validating, null);
            }        static public void ChangeStyle(DataGrid dg, bool Selectable, bool[] ReadOnly, System.ComponentModel.CancelEventHandler[] Validating, int[] Width)
            {
                DataGridTableStyle      ts;
                DataGridTextBoxColumn   dgtbc;
                DataSet                 ds;
                DataColumn              dc;
                int                     i, c, d, widthlen;
                bool                    b;
                bool[]                  brs;
                System.ComponentModel.CancelEventHandler[]  cevhs;
                Graphics                g;            b = (dg.TableStyles.Count>0);            if (b) return;            b                       = dg.ReadOnly;
                if (ReadOnly == null)
                {
                    ReadOnly    = new bool[1];
                    ReadOnly[0] = b;
                }            if (Validating == null)
                {
                    Validating = new System.ComponentModel.CancelEventHandler[1];
                    Validating[0] = null;
                }            if (dg.DataSource is DataSet)
                    ds = (DataSet) dg.DataSource;
                else
                    ds = ((DataTable) dg.DataSource).DataSet;            ts                      = new DataGridTableStyle();
                ts.MappingName          = ds.Tables[0].TableName;
                ts.AlternatingBackColor = dg.AlternatingBackColor;
                ts.BackColor            = dg.BackColor;
                ts.ForeColor            = dg.ForeColor;
                ts.GridLineColor        = dg.GridLineColor;
                ts.GridLineStyle        = dg.GridLineStyle;
                ts.HeaderBackColor      = dg.HeaderBackColor;
                ts.HeaderForeColor      = dg.HeaderForeColor;
                ts.LinkColor            = dg.LinkColor;
                ts.ReadOnly             = dg.ReadOnly;
                ts.SelectionBackColor   = dg.SelectionBackColor;
                ts.SelectionForeColor   = dg.SelectionForeColor;            c                       = ds.Tables[0].Columns.Count;            d                       = (c < ReadOnly.Length? ReadOnly.Length: c);
                brs                     = new bool[d];
                ReadOnly.CopyTo(brs, 0);
                for (i = ReadOnly.Length; i < d; i++)
                    brs[i] = b;            d                       = (c < Validating.Length? Validating.Length: c);
                cevhs                   = new System.ComponentModel.CancelEventHandler[d];
                Validating.CopyTo(cevhs, 0);            for (i = ReadOnly.Length; i < d; i++)
                    cevhs[i] = null;            g   = dg.CreateGraphics();            b   = (Width != null);
                if (b)
                    widthlen    = Width.Length;
                else
                    widthlen    = 0;            for (i = 0; i < c; i++)
                {
                    dgtbc = new DataGridTextBoxColumn();
                    dgtbc.TextBox.VisibleChanged += new EventHandler(dgcolumn_VisibleChanged);
                    if (cevhs[i] != null)
                        dgtbc.TextBox.Validating += cevhs[i];
                    dgtbc.TextBox.Tag = brs[i];
                    dc                  = ds.Tables[0].Columns[i];
                    if  (dc.Caption != "")
                        dgtbc.HeaderText= dc.Caption;
                    else
                        dgtbc.HeaderText= dc.ColumnName;
                    dgtbc.MappingName   = dc.ColumnName;
                    if (b && (i < widthlen) && Width[i] > 0)
                        dgtbc.Width     = Width[i];
                    else
                        dgtbc.Width         = (int) g.MeasureString(dgtbc.HeaderText + "#V#", dg.CaptionFont).Width;
                    ts.GridColumnStyles.Add(dgtbc);
                }
                dg.TableStyles.Clear();
                dg.TableStyles.Add(ts);
                if (Selectable) dg.MouseMove += new MouseEventHandler(dg_Mouse);
                dg.Update();
            }        private static void dgcolumn_VisibleChanged(object sender, System.EventArgs e)
            {
                Point   p;
                TextBox t;
                Control c;
                bool    b;            c   = (Control) sender;
                if (c.Visible)
                {
                    b   = (bool) c.Tag;
                    if (!b) 
                    {
                        t           = (TextBox) c;
                        t.ReadOnly  = false;
                        t.CausesValidation = true;
                        return;
                    }
                    p           = c.Location;
                    c.Visible   = false;
                    c           = c.Parent;
                
                dgSelectCore(c, new MouseEventArgs(MouseButtons.Left, 1, p.X, p.Y, 0), true); 
                }
            }        private static void dgSelectCore(object sender, System.Windows.Forms.MouseEventArgs e, bool ForceSelect)
            {
                DataGrid dg = (DataGrid) sender;
                int rn, i, tmp;
                if (e.Button == MouseButtons.Left)
                {
                    rn  = dg.HitTest(e.X, e.Y).Row;
                    if (rn<0) return;
                    i   = dg.CurrentCell.RowNumber;                System.Diagnostics.Debug.WriteLine("rn = " + rn.ToString() + ", i = " + i.ToString() + ", ForceSelected = " + ForceSelect.ToString() + ", IsSelected = " + dg.IsSelected(i).ToString());                if ((rn == i) && !ForceSelect)
                    {
                        rn  = 0;
                        tmp = 0;
                        try
                        {
                            for ( ; ; rn++)
                                if (dg.IsSelected(rn) && (i != rn)) break;
                            
                            for ( ; ; rn++)
                                if (i != rn)
                                    dg.UnSelect(rn);                    }
                        catch{}
                    }
                    else if (dg.IsSelected(i) || ((i == rn) && ForceSelect))
                    {
                        try
                        {
                            if (rn > i)
                                tmp = i;
                            else
                            {
                                tmp = rn;
                                rn  = i;
                            }
                            for (i = 0; i < tmp; i++)
                                if (dg.IsSelected(i)) dg.UnSelect(i);
                            for (; i <= rn; i++)
                                if (!dg.IsSelected(i)) dg.Select(i);
                            for (; ;i++)
                                if (dg.IsSelected(i)) dg.UnSelect(i);
                        }
                        catch{}
                    }
                }
            }        private static void dg_Mouse(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                dgSelectCore(sender, e, false);
            }
    }
    }
      

  3.   

    这些问题如果还没有得到求解
    参考
    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q480q
    能否对你有帮助,上面都有述说以及代码
      

  4.   

    简单地说,你的消息被DataGrid控件里面的DataGridTextBoxColumn的一些内部控件吃掉了