winform 同时打开多个窗体,获取当前操作(Active)的窗体.

最近工作项目中使用winform开发时碰到这样一种场景,同时打开了多个Form页面且没有隐藏Hide(),需要获取当前正在操作Avtive的页面,在被窗体调用的控件中可以使用This.ParentForm获取,但如果是普通功能类则无法使用这种方式获取,使用Form窗体静态属性Form.ActiveForm直接取值,不止为何为Null,。

  于是从应用程序管理的Application.OpenForms属性着手,类型为FormCollection,储存所有打开未关闭的From窗体(包含Hide()隐藏的窗体)。遍历form调用属性发现没有Active公开属性可以调用,于是尝试了Visible/Canfocus/Enabled/CanSelect/ContainsFocus几个bool属性,看能否判断出当前ActiveForm,调试发现Hide()的窗体除了Enabled=true,其他4个Boo均为False,与之相反,未隐藏的所有打开窗体则Visible/Canfocus/Enabled/CanSelect属性值均为True, 对于当前操作的打开窗体则还有ContainsFocus属性为True,所有通过ContainsFocus可以区分所有打开的窗体中的当前选中的Active窗体。代码如下:

  

1 Form activeForm= null;
2 foreach (Form item in Application.OpenForms)
3 {
4     if (item.ContainsFocus)
5     {   //当前活动窗体
6         activeForm= item;
7         break;
8     }
9 }    

 

posted on 2024-10-12 10:52  桐舟共济  阅读(22)  评论(0编辑  收藏  举报

导航