新建一个工程,添加一个textbox,再添加一个工具栏,工具栏上添加一个toolStripTextBox1
现在你运行,你会发现:如果焦点在toolStripTextBox1,你点击标题栏后,焦点会无故的转到textbox谁能帮忙写一个判断,原来焦点在哪里,点击标题栏后焦点还是在那里

解决方案 »

  1.   

    获取焦点
      textBox1.Focus();
      

  2.   

    那是不可能的(起码我认为不可能,期待高手)焦点原来在textbox1,你点击标题后焦点就到了标题,但是你可以在点击标题事件中让textbox2获得焦点我认为C#无法判断原来的焦点。
      

  3.   

    搞定了
    上代码:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace setfocus
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private Control ctl;
            private void textBox1_Enter(object sender, EventArgs e)
            {
                this.ctl = textBox1;
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.ctl.Focus();
            }        private void textBox2_Enter(object sender, EventArgs e)
            {
                this.ctl = textBox2;
            }        private void textBox3_Enter(object sender, EventArgs e)
            {
                this.ctl = textBox3;
            }        private void textBox4_Enter(object sender, EventArgs e)
            {
                this.ctl = textBox4;
            }        private void richTextBox1_Enter(object sender, EventArgs e)
            {
                this.ctl = richTextBox1;
            }        private void richTextBox2_Enter(object sender, EventArgs e)
            {
                this.ctl = richTextBox2;
            }
        }
    }
      

  4.   

    测试方法:
    在窗体拖1个按钮,供点击按钮时为控件设置焦点。
    拖了4个TextBox控件2个RichTextBox控件,分别点击这些控件的事件,设置Enter事件,其事件就是全局私有变量ctl赋值,将自己的名字赋值给ctl。
    按钮的点击事件很简单,就是ctl.Focus()即可知道上次的焦点是哪一个了嘿嘿,自己试试吧
      

  5.   

    我是用Control类来记录控件名称的,上面的程序只能判断一次上次的焦点在哪个控件,如果写成数组,能判断数组长度的焦点历史记录(就和编辑软件能撤销的次数原理差不多)
      

  6.   

    嗯嗯嗯,还可以用tab设置光标的顺序
      

  7.   

    回yalan:你感谢你帮我研究,可是我感觉对于我的情况还是不行我想让点击窗体标题栏或者移动窗体后恢复到原来有焦点的文本框
    就我的例子:我在textbox和toolStripTextBox1的enter事件里分别写了:
    this.ctl = textBox1;
    this.ctl = this.ActiveControl;(我写this.ctl = this.toolStripTextBox1时出错)可是我测试了:比如我在Form1_LocationChanged写ctl.Focus();
    但是仍然每次都是textBox1获得焦点
    因为在发生Form1_LocationChanged前焦点已经转到了textBox1,无论之前焦点在哪.这是不是vs的一个bug,我也想过很多方法,看来是解决不了了