一个很简单的要求,谁能帮忙给出代码

paschen 2011-02-24 08:41:21
新建一个工程,添加一个textbox,再添加一个工具栏,工具栏上添加一个toolStripTextBox1
现在你运行,你会发现:如果焦点在toolStripTextBox1,你点击标题栏后,焦点会无故的转到textbox

谁能帮忙写一个判断,原来焦点在哪里,点击标题栏后焦点还是在那里
...全文
131 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yalan 的回复:]
引用 13 楼 paschen 的回复:
上面打错了,是 很感谢你帮我研究


你检查一下你的代码,看看是否别的地方有问题,我测试没问题的。即使不用我的代码,你的情况也是原来谁有焦点拖动窗体后还是焦点
[/Quote]


如果窗体上多个文本框确实是这样,但是如果有一个文本框在工具栏上就不是,你试一试。
yalan 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 paschen 的回复:]
上面打错了,是 很感谢你帮我研究
[/Quote]

你检查一下你的代码,看看是否别的地方有问题,我测试没问题的。即使不用我的代码,你的情况也是原来谁有焦点拖动窗体后还是焦点
yalan 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 paschen 的回复:]
回yalan:

你感谢你帮我研究,可是我感觉对于我的情况还是不行

我想让点击窗体标题栏或者移动窗体后恢复到原来有焦点的文本框
就我的例子:我在textbox和toolStripTextBox1的enter事件里分别写了:
this.ctl = textBox1;
this.ctl = this.ActiveControl;(我写this.ctl = this.toolStripT……
[/Quote]


我测试的就是啊,没发现你说的问题,能否说的再详细点?
paschen 2011-02-24
  • 打赏
  • 举报
回复
上面打错了,是 很感谢你帮我研究
paschen 2011-02-24
  • 打赏
  • 举报
回复
回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,我也想过很多方法,看来是解决不了了
renyiqiu 2011-02-24
  • 打赏
  • 举报
回复
LS的解答的很好了,没什么要说了呵呵
mayuliuze 2011-02-24
  • 打赏
  • 举报
回复
嗯嗯嗯,还可以用tab设置光标的顺序
yalan 2011-02-24
  • 打赏
  • 举报
回复
我是用Control类来记录控件名称的,上面的程序只能判断一次上次的焦点在哪个控件,如果写成数组,能判断数组长度的焦点历史记录(就和编辑软件能撤销的次数原理差不多)
yalan 2011-02-24
  • 打赏
  • 举报
回复
测试方法:
在窗体拖1个按钮,供点击按钮时为控件设置焦点。
拖了4个TextBox控件2个RichTextBox控件,分别点击这些控件的事件,设置Enter事件,其事件就是全局私有变量ctl赋值,将自己的名字赋值给ctl。
按钮的点击事件很简单,就是ctl.Focus()即可知道上次的焦点是哪一个了

嘿嘿,自己试试吧
yalan 2011-02-24
  • 打赏
  • 举报
回复
搞定了
上代码:

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;
}
}
}

wuyq11 2011-02-24
  • 打赏
  • 举报
回复
设置activecontrol
yalan 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 paschen 的回复:]
我要判断!
[/Quote]

哎,不对!我有注意了,应该有办法实现你的想法。写个小程序测试一下,通过后上来答复你
yalan 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 paschen 的回复:]
新建一个工程,添加一个textbox,再添加一个工具栏,工具栏上添加一个toolStripTextBox1
现在你运行,你会发现:如果焦点在toolStripTextBox1,你点击标题栏后,焦点会无故的转到textbox

谁能帮忙写一个判断,原来焦点在哪里,点击标题栏后焦点还是在那里
[/Quote]


那是不可能的(起码我认为不可能,期待高手)

焦点原来在textbox1,你点击标题后焦点就到了标题,但是你可以在点击标题事件中让textbox2获得焦点

我认为C#无法判断原来的焦点。
子夜__ 2011-02-24
  • 打赏
  • 举报
回复
获取焦点
textBox1.Focus();

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧