gpt4 book ai didi

windows-mobile - 如何将使用 ShowDialog 显示的表单中的消息附加到 Application2?

转载 作者:行者123 更新时间:2023-12-01 04:17:39 25 4
gpt4 key购买 nike

我正在尝试使用此 article 中的代码这让您知道您的应用程序何时空闲..

如果您的应用程序只有一个表单,则此代码非常有用。您调用Application2.Run(myOnlyForm)在它上面,所有消息都通过 Application2 中的过滤器进行路由。

但是,如果您在任何时候调用 mySecondForm.ShowDialog()该对话框没有通过 Application2 过滤其消息。

有什么方法(没有不良副作用)可以在 mySecondForm 上获取消息吗?通过“Application2”事件过滤器?

我试过了:

  • 更改 mySecondForm.ShowDialogApplication2.Run(mySecondForm) .
  • 这会导致窗口在超出范围时不清理,并且在需要时不显示。
  • 更改 mySecondForm.ShowDialogApplication2.ShowDialog(mySecondForm) .
  • 这会导致 mySecondForm 上的主菜单不工作(点击没有效果,只是哔声)。
  • 这似乎是我应该使用的,但我需要在我的屏幕上有菜单。看来这是一个common problem使用 OpenNETCF。
  • 菜单项没有损坏。使用菜单的热键仍然有效。只是点击菜单不起作用。
  • 更改 mySecondForm.ShowDialogApplication2.ShowDialog(mySecondForm, true) (true = 清理对话框)。
  • 这不起作用,因为我需要在对话框关闭几次后访问它。

  • 理想情况下,我想要一种将表单附加到 Application2 的消息功能的方法。

    但我欢迎任何建议。

    编辑:
    根据对 ctacke 的建议,这就是我所做的:
    public static DialogResult ShowDialog2(this Form form)
    {
    //form.Activated += InsertMenu;
    //Application2.ShowDialog(form);
    form.Show();
    try
    {
    do
    {
    Application2.DoEvents();
    } while (form.Visible);
    }
    catch (ObjectDisposedException)
    {
    // This just means that the form was closed. Not a big deal.
    }
    return form.DialogResult;

    }

    我最终调用 ShowDialog2 而不是 ShowDialog

    最佳答案

    我可以解释这种行为,但可能无法提供直接的解决方案。

    当您在任何表单上调用 Show 时,表单的事件由默认消息泵处理(通过调用 Run 进行设置)。当您调用 ShowDialog 时,目标 Form 将获得自己的独立消息泵。

    现在,您添加的过滤器位于主消息泵中,它正在查看那里的所有消息,但 ShowDialog 调用绕过了这一点 - 发送到对话框的消息将永远不会到达过滤器。

    现在我们确实添加了 Application2.ShowDialog 调用作为解决此问题的尝试,但老实说,虽然我编写了整个 Application.Run/IMEssageFilter 实现,但我没有执行 ShowDialog 解决方法,我真的不知道如何好吧,它被实现了。根据您的报告,我会冒险猜测“不太好”,尽管这确实不是一个简单的问题要解决。这个问题的根源在于,当您调用 Show 和 ShowDialog 时,SDF 无法控制 BCL 中发生的事情——我们只是试图坐在它之上并提供我们所能提供的最佳行为。在这种情况下,这是有问题的。

    您能否碰巧不使用对 ShowDialog 的调用,而只是使用 Show 加上诸如保持 TopMost 表单之类的东西?这将允许过滤器获取伪对话框的所有消息。我可以立即想到的另一个选项是 Dialogs 的基类,它将通知回过滤器机制,但这开始变得难以控制。

    关于windows-mobile - 如何将使用 ShowDialog 显示的表单中的消息附加到 Application2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105438/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com