当前位置:编程学习 > C#/ASP.NET >>

MDI窗体中,如何判断哪个子窗体处于激活状态?

如题 --------------------编程问答-------------------- 现在没有环境,大致是这样的
foreach (Form childForm in this.MdiChildren)
{
  //
  if(childForm.WindowsState == FormWindowState.Normal      ||childForm.WindowsState == FormWindowState.Maxsized)
  {
    
  }
} --------------------编程问答-------------------- foreach   (Form   childForm   in   this.MdiChildren) 

    // 
    if(childForm.Actived) 
    { 
        //操作
    } 
} --------------------编程问答-------------------- 同意一楼,在做下补充
childForm.WindowsState   ==   FormWindowState.Minimized --------------------编程问答--------------------
if (ActiveMdiChild != null)
    ActiveMdiChild.Text = DateTime.Now.ToString();
--------------------编程问答-------------------- foreach       (Form       childForm       in       this.MdiChildren)  
{  
   
        if(childForm.Actived)  
        {  
   
        }  
} --------------------编程问答-------------------- Form.ActiveMdiChild 属性

获取当前活动的多文档界面 (MDI) 子窗口。 

命名空间:System.Windows.Forms
程序集:System.Windows.Forms(在 system.windows.forms.dll 中)

属性值
返回表示当前活动的 MDI 子窗口的 Form,或者如果当前没有子窗口,则返回空引用(在 Visual Basic 中为 Nothing)。

备注
可使用此方法确定 MDI 应用程序中是否有任何打开的 MDI 子窗体。也可使用此方法从 MDI 子窗口的 MDI 父窗体或者从应用程序中显示的其他窗体对该 MDI 子窗口执行操作。

如果当前活动窗体不是 MDI 子窗体,则可使用 ActiveForm 属性获得对它的引用。


示例
下面的代码示例获取对活动 MDI 子窗体的引用,并依次通过该窗体上的所有 TextBox 控件,重置这些控件的 Text 属性。此示例要求已创建 MDI 父窗体,而且从 MDI 父窗体执行此方法调用。

public void ClearAllChildFormText()
 {
    // Obtain a reference to the currently active MDI child form.
    Form tempChild = this.ActiveMdiChild;
    
    // Loop through all controls on the child form.
    for (int i = 0; i < tempChild.Controls.Count; i++)
    {
       // Determine if the current control on the child form is a TextBox.
       if (tempChild.Controls[i] is TextBox)
       {
          // Clear the contents of the control since it is a TextBox.
          tempChild.Controls[i].Text = "";
       }
    }
 }
--------------------编程问答-------------------- 感谢跟贴的各位兄弟,已经有了一点突破,
我现在是这样的问题:我建了2个mdi子窗口,并且在父窗体上放置了几个button、Textbox等控件
其中一个mdi子窗体内引用了C++的dll(以下称为*子窗体),并且在这个dll内部有键盘操作(例如left,right,up,down)
在另一个mdi子窗体上我也都放了几个button等控件

我的目的是当鼠标点击*子窗体时,响应dll内部的键盘操作,点击其他窗体时,屏蔽掉dll内部的键盘操作,而正常响应在其他子窗体上控件之间的焦点转换
并且在点击父窗体的子控件时,同样屏蔽掉*子窗体调用的dll的键盘操作,而只响应父窗体其他子控件的键盘操作
现在我使用6楼说的ActtiveMdiChild属性实现了第一步,鼠标点击各子窗口时,切换了键盘操作,但是第二步没有实现,比如我先点击*子窗体,再点击父窗体的button控件时,仍然响应*子窗体的dll的内部键盘操作

———————————在*子窗体的重载OnPaint函数中我做了这样的判断,实现了第一步—————————————————

            if (this.ParentForm.ParentForm.ActiveMdiChild == this.ParentForm)
                rend(); // dll内部函数,实际上是D3D的Render(),内部有键盘操作
                this.Invalidate();



感谢各位的解答 --------------------编程问答-------------------- 顶起,希望得到更多高手的解答,谢谢!! --------------------编程问答-------------------- 没有人愿意解答这个问题吗?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,