MDI中子窗体的焦点问题.怪....

MyLf 2004-12-16 06:36:35
在MDI的主窗体中,左边是一个TreeView,通过单击节点来显示不同的子窗体. 当子窗体显示出来后焦点还在TreeView上,以致于子窗体没有输入焦点.
实际上是:子窗体显示出来后,其上的第一个可以获得焦点的控件(假定为A控件吧)已取得焦点,但之后焦又跑回到TreeView上去了.且A控件会触发Leave事件,但当用鼠标点击A控件使光标出现在A控件上,当光标移开A控件时,它不会触发Leave事件了.如果光标再回去,就会触发.

虽然我已实现了点击TreeView节点显示窗体时使焦出现在子窗体上,且第一次从A控件移开光标时也会触发Leave事件.但自认为实现的方法不好,并且每一个子窗体都要去那样写,麻烦...

大家有没有遇到相似的问题? 有没有好的方法?
...全文
179 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京的雾霾天 2004-12-17
  • 打赏
  • 举报
回复
我觉得我的上面的代码以能解决这个特殊要求的问题了.楼主可以看一下,只用一个异步操作就行了.
51106354 2004-12-17
  • 打赏
  • 举报
回复
是必须业务这么要求吗?我想不应该对每个子窗体进行这样的设置吧,如果这样就不好连续操作TreeView控件了,用起来很别扭的
北京的雾霾天 2004-12-17
  • 打赏
  • 举报
回复
因为一个代理开始的异步程序不再和当前线程同步,在异步中打开的窗体也就不必再等受treeView的选节点的约束.这样打开的窗体就是激活的了.
北京的雾霾天 2004-12-17
  • 打赏
  • 举报
回复
你可以这样来做,或按这种方式来做:

delegate void dlgProc(string path);

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
string NodeText = null;

TreeNode node = this.treeView1.SelectedNode;
if (node != null)
{
NodeText = node.Text;

dlgProc dp = new dlgProc(this.thProc);
dp.BeginInvoke(path,null,null);
}
}

private void thProc(string path)
{
dlgProc dp = new dlgProc(OpenSubForm);
this.Invoke(dp, new object[]{path});
}

private void OpenSubForm(string path)
{
Form f = new Form();
f.Text = path;
f.Show();
}
MyLf 2004-12-17
  • 打赏
  • 举报
回复
用Activate()和Focus()方法都试过了.不行
zag 2004-12-17
  • 打赏
  • 举报
回复
用子窗口的Active()方法试试。
MyLf 2004-12-17
  • 打赏
  • 举报
回复
让焦点出现在子窗体上就是用户要求的.因为他想显示窗体后就马上可以输入数据.
毕竟用户关注的是子窗体而不是TreeView的节点选择吧.
MyLf 2004-12-17
  • 打赏
  • 举报
回复
问题搞定.非常感谢hbxtlhx(最后一片绿叶) .
代理的异步调用以前看过,忘记了.

贴子加分啦!!!
北京的雾霾天 2004-12-17
  • 打赏
  • 举报
回复
相似的问题:
http://community.csdn.net/Expert/topic/3634/3634183.xml?temp=.2046778
北京的雾霾天 2004-12-16
  • 打赏
  • 举报
回复
我觉得没有必要非要让那个窗体得到焦点,如果想操作就让用户自己来得到焦点就行了,因为,如果用户一直在操作TreeView,比如用键盘,每移动一个节点都使焦点离开treeView,那么用户会接受不了这个现象的,用户希望焦点在treeView上面以便能接着选其它的节点.而不想操作treeView的时候才想着把焦点移动到打开的窗体上再操作.这样也是合人们使用习惯的.

110,552

社区成员

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

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

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