Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过单击来确定将哪个表单置于最前面?_C#_Forms - Fatal编程技术网

C# 如何通过单击来确定将哪个表单置于最前面?

C# 如何通过单击来确定将哪个表单置于最前面?,c#,forms,C#,Forms,我有一个包含子窗体对象的面板应用程序。当我单击其中一个子窗体时,它会显示在前面。我想知道现在哪一个在前面。。。 我查看了活动列表,但未能从我的目的中找到合适的活动: 这些方法不起作用: protected void OpenedFileForm_Enter(object sender, EventArgs e) { MessageBox.Show("enter"); } protected void OpenedFileForm_Click(ob

我有一个包含子窗体对象的面板应用程序。当我单击其中一个子窗体时,它会显示在前面。我想知道现在哪一个在前面。。。 我查看了活动列表,但未能从我的目的中找到合适的活动:

这些方法不起作用:

    protected void OpenedFileForm_Enter(object sender, EventArgs e)
    {
        MessageBox.Show("enter");
    }

    protected void OpenedFileForm_Click(object sender, EventArgs e)
    {
        MessageBox.Show("click");
    }

    protected void OpenedFileForm_Activated(object sender, EventArgs e)
    {
        MessageBox.Show("activated");
    }

    protected void OpenedFileForm_MouseClick(object sender, MouseEventArgs e)
    {
       MessageBox.Show("mouse click");
    }

    protected void OpenedFileForm_Shown(object sender, EventArgs e)
    {
        MessageBox.Show("shown");
    }
您是否尝试过表单。激活事件

编辑:

如果您在MDI应用程序中,则可能需要改用MdiChildActivate


好的,我知道了!谢谢大家的帮助。您给了我一个提示,让我思考一下我奇怪的MDI想法的公平性,其中Panel是其他表单的父级。我删除了包含面板的SplitContainer,只做了标准MDI应用程序,其中窗体是主窗体的MDI子级。
childTXT.MdiParent=此

只有将Form.TopLevel属性设置为false时,此代码才能工作。这使得它变成了一个子控件,几乎无法与UserControl区分开来

这有很多副作用,其中一个就是不再有正面的概念。子控件的Z顺序由它们在其父控件集合中的位置决定。它会影响它触发的事件,激活和停用的事件永远不会触发。此外,表单类被设计成一个容器控件,它不喜欢关注焦点本身。它的子控件获得焦点,Form类对焦点没有任何用处。这就是为什么Enter、Click和MouseClick事件不会触发的原因,它们是需要焦点的事件

长话短说,你试图做的事情并没有完全意义。如果严格来说是要修复的Z顺序,则为MouseDown事件编写事件处理程序:

    void OpenedFileForm_MouseDown(object sender, MouseEventArgs e) {
        var frm = (Form)sender;
        frm.BringToFront();
    }

您可以添加frm.Select以触发Enter事件,但仅当窗体本身不包含任何可聚焦控件时才这样做。请注意,有证据表明您没有在代码中正确分配事件。显示的事件不会触发。同样重要的是,要将FormBorderStyle设置为“无”,标题栏不能再指示激活状态。

是的,我试过了。我编辑了我的帖子,以显示我已经使用了哪些方法。我单击表单,它会显示在前面,但没有调用我的任何方法。@Rotem Nope,这一个也不起作用:这些子表单不是主表单的MDI子表单。它们是这样设置的:childForm.Parent=mainPanel;其中mainPanel是System.Windows.Forms.Panel类的对象。我不明白这是怎么可能的:请添加代码,以显示您的场景的完整示例。@Sirtarius您也可以发布setMainForm吗?我不知道这个场景在没有MDI的情况下是可能的。我仍然对你以前的尝试很感兴趣。你的意思是告诉我子窗体被剪切到面板的边界?我无法重现类似的情况。是的。在我达到这一点之前,它运行得相当好。我喜欢舒尔,我没有使用任何额外的操作来实现它。但我是C和WindowsForms编程新手,所以我可能会意外地做一些事情。请参阅Thx以了解其内部工作原理。我担心它是这样的:/无论如何,我认为标准的MDI方法将使我免于未来的其他问题,所以我将只使用MdiParent属性,而不是此面板尝试。@Hans感谢您为我解答了这个谜团。
    void OpenedFileForm_MouseDown(object sender, MouseEventArgs e) {
        var frm = (Form)sender;
        frm.BringToFront();
    }