因为我在写程序遇到一个问题,所以自己写了一个简单的测试。
加入两个文本框,添加得到焦点的事件。然后分别设置textBox1,textBox2的TabIndex为1和2,
private void textBox1_Enter(object sender, EventArgs e)
{
string str = "";
}private void textBox2_Enter(object sender, EventArgs e)
{
string str = "";
textBox1.Focus();
}
运行程序,默认textBox1得到的焦点,当我按Tab时直接用鼠标单击textBox2时,按道理代码执行过程是
textBox2_Enter()--textBox1_Enter()--结束,但是当按Tab时,textBox1_Enter()会连续执行两次;当用鼠标单击textBox2执行过程更复杂,textBox2_Enter--textBox1_Enter--textBox1_Enter--textBox2_Enter--textBox1_Enter--textBox1_Enter--结束
为什么会这样,我希望是textBox2_Enter()--textBox1_Enter()--结束 就行了啊,,
加入两个文本框,添加得到焦点的事件。然后分别设置textBox1,textBox2的TabIndex为1和2,
private void textBox1_Enter(object sender, EventArgs e)
{
string str = "";
}private void textBox2_Enter(object sender, EventArgs e)
{
string str = "";
textBox1.Focus();
}
运行程序,默认textBox1得到的焦点,当我按Tab时直接用鼠标单击textBox2时,按道理代码执行过程是
textBox2_Enter()--textBox1_Enter()--结束,但是当按Tab时,textBox1_Enter()会连续执行两次;当用鼠标单击textBox2执行过程更复杂,textBox2_Enter--textBox1_Enter--textBox1_Enter--textBox2_Enter--textBox1_Enter--textBox1_Enter--结束
为什么会这样,我希望是textBox2_Enter()--textBox1_Enter()--结束 就行了啊,,
解决方案 »
- 对象绑定到PropertyGrid,根据属性A的设置值,控制属性B是否显示
- 请教大虾们一个打印的实现方法
- 浏览器右键菜单启动自己写的程序中的种种问题
- winform下的ReportViewer如何不显示预览,直接打印呢?
- 有谁用 VS.NET 2003 + Datawindow.NET 开发过项目?
- 初学.NET C#
- 如何在窗体的构造函数内获得Graphics对象,从而实现和OnPaint相同的功能.
- 初学C#请大家推荐几本经典的C#书籍。
- 请问用C#编辑生成的dll文件,可以反编辑吗?
- 请问c#和vB
- 为什么这个存储过程运行显示对象名 'proc_login_select' 无效。 没有行受影响。
- 用C#写一个自增序号的程序,要求是三位数如001,002,如果新添数据编号重复,则自动递增
{
//默认焦点,所以我活动(第1次)
MessageBox.Show("因为焦点在,所以我活动");
} private void textBox2_Enter(object sender, EventArgs e)
{
MessageBox.Show("因为焦点在,所以我活动");
textBox1.Focus();//TODO:TabIndex=1的是否活动?答案Yes!那我继续活动一次(第2次)
}
应该是触发三次private void textBox1_Enter(object sender, EventArgs e)
{
//默认焦点,所以我活动(第1次)
MessageBox.Show("因为焦点在,所以我活动");
} private void textBox2_Enter(object sender, EventArgs e)
{
MessageBox.Show("因为焦点在,所以我活动");//第2次
textBox1.Focus();//TODO:TabIndex=1的是否活动?答案Yes!那我继续活动一次(第3次)
}如果你要实现你的功能,那么你的事件就选错了,KeyDown或许可以
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (ActiveControl != null)
{
this.SelectNextControl(this.ActiveControl, true, true, true, true);
}
}
}
用别的事件
private void textBox2_Enter(object sender, EventArgs e)
{
if (a)
return;
OutputDebugString("2");
}
static bool a = false;
static bool b = false;
private void textBox3_Enter(object sender, EventArgs e)
{
OutputDebugString("3");
a = true;
textBox2.Focus();
a = false;
}
这个是捕捉不到的
只能判断时间间隔
离开的时候判断
编号时间等等
然后再判断要不要textBox1.Select();
这种诡异的需求的目的是?
如果只是不想tab到textbox上,直接tabstop属性就可以
改用textBox1.Select();好像同样能得到聚焦的效果,但没有副作用。