新建一个工程,添加一个textbox,再添加一个工具栏,工具栏上添加一个toolStripTextBox1
现在你运行,你会发现:如果焦点在toolStripTextBox1,你点击标题栏后,焦点会无故的转到textbox谁能帮忙写一个判断,原来焦点在哪里,点击标题栏后焦点还是在那里
现在你运行,你会发现:如果焦点在toolStripTextBox1,你点击标题栏后,焦点会无故的转到textbox谁能帮忙写一个判断,原来焦点在哪里,点击标题栏后焦点还是在那里
textBox1.Focus();
上代码: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;
}
}
}
在窗体拖1个按钮,供点击按钮时为控件设置焦点。
拖了4个TextBox控件2个RichTextBox控件,分别点击这些控件的事件,设置Enter事件,其事件就是全局私有变量ctl赋值,将自己的名字赋值给ctl。
按钮的点击事件很简单,就是ctl.Focus()即可知道上次的焦点是哪一个了嘿嘿,自己试试吧
就我的例子:我在textbox和toolStripTextBox1的enter事件里分别写了:
this.ctl = textBox1;
this.ctl = this.ActiveControl;(我写this.ctl = this.toolStripTextBox1时出错)可是我测试了:比如我在Form1_LocationChanged写ctl.Focus();
但是仍然每次都是textBox1获得焦点
因为在发生Form1_LocationChanged前焦点已经转到了textBox1,无论之前焦点在哪.这是不是vs的一个bug,我也想过很多方法,看来是解决不了了