获得焦点的终极解决方法

一般情况下,让控件获得焦点只要 控件ID.Focus()即可了,但是有些时候这样是不行的,我就遇到过很特别狠痛苦的,直接上代码吧

一 让DataGridView控件的指定单元格获得焦点

#region 让DataGridView控件的指定单元格获得焦点
        /// <summary>
        /// 让DataGridView控件的指定单元格获得焦点
        /// 采用异步延迟的方式
        /// </summary>
        /// <param name="gv"></param>
        /// <param name="cell">要获得焦点的单元格</param>
        public static void SetFocusedCell(DataGridView gv, DataGridViewCell cell)
        {
            using (BackgroundWorker bg = new BackgroundWorker())
            {
                bg.DoWork += (o, e) => { System.Threading.Thread.Sleep(5); };
                bg.RunWorkerCompleted += (o, e) =>
                {
                    gv.CurrentCell = cell;
                    System.Windows.Forms.SendKeys.Send("^a");//将单元格的内容全选
                    gv.BeginEdit(false);
                };
                bg.RunWorkerAsync();
            }
        }
        #endregion

 

二 让文本框获得焦点

 #region 让文本框获得焦点
        /// <summary>
        /// 让文本框获得焦点
        /// 采用异步延迟的方式
        /// </summary>
        /// <param name="ctl"></param>
        public static void SetFocusedTextBox(Control ctl)
        {
            using (BackgroundWorker bg = new BackgroundWorker())
            {
                bg.DoWork += (o, e) => { System.Threading.Thread.Sleep(5); };
                bg.RunWorkerCompleted += (o, e) =>
                {
                    ctl.Focus();
                    ctl.Select();
                    System.Windows.Forms.SendKeys.Send("^a");//将单元格的内容全选
                };
                bg.RunWorkerAsync();
            }
        }
        #endregion

 

posted on 2013-05-23 10:44  冷月孤峰  阅读(243)  评论(0)    收藏  举报