C# MessageBox出现问题

C# MessageBox出现问题,c#,windows-mobile,compact-framework,C#,Windows Mobile,Compact Framework,我对一个用于模态的MessageBox有问题 情况是这样的, 用户从表单中选择xx 消息框出现 用户从设备上打开内置的软件键盘 用户关闭键盘 MessageBox如何失去焦点?很高兴能成为莫代尔!主要形式如前景所示 应用程序将被阻止,因为用户现在无法关闭MessageBox。 下面是MessageBox的代码片段 MessageBox.Show("message", "caption", MessageBoxButtons.OK, MessageBoxIcon.Asterisk,

我对一个用于模态的MessageBox有问题

情况是这样的,

用户从表单中选择xx 消息框出现 用户从设备上打开内置的软件键盘 用户关闭键盘 MessageBox如何失去焦点?很高兴能成为莫代尔!主要形式如前景所示 应用程序将被阻止,因为用户现在无法关闭MessageBox。 下面是MessageBox的代码片段

MessageBox.Show("message", "caption", MessageBoxButtons.OK, MessageBoxIcon.Asterisk,
                                    MessageBoxDefaultButton.Button1);

关于如何解决这个问题,您有什么想法吗?

在调用MessageBox时需要包含对父窗体的引用。显示IWin32Window参数,通常只需传入此参数即可。我相信这是您想要使用的过载-请参阅以下内容:

MessageBox.Show Method (IWin32Window, String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton)

享受吧

这实际上是Windows CE下的预期行为,我不是说这是正确的,只是预期而已

当你点击桌面角落的SIP按钮时,你的整个应用程序会失去焦点,焦点会传递到任务栏。通过点击应用程序的任务栏按钮,您可以看到类似的wierdness——消息框将失去焦点,尽管您应该只是将焦点发送到已经运行的应用程序

通过如下更改MessageBox调用,可以看出这不是CF错误:

private void button1_Click(object sender, EventArgs e)
{
    //MessageBox.Show("message", "caption", MessageBoxButtons.OK, 
    //                                    MessageBoxIcon.Asterisk,
    //                                    MessageBoxDefaultButton.Button1);

    MessageBoxCE(this.Handle, "message", "caption", 0);
}

// renamed to not collide with the Windows.Forms MessageBox class
[DllImport("coredll", EntryPoint="MessageBox")]
private static extern int MessageBoxCE(IntPtr hWnd, string lpText, 
                                       string lpCaption, int Type);
你会得到完全相同的行为

有一件事是预料不到的,那就是父窗体出现在MessageBox的上方。我刚刚在桌面上的基于ARM的CE5.0设备上进行了测试,MessageBox在CF和P/Invoke版本中都保持在顶部

你能用一个非常基本的应用程序,即仅仅一个表单,一个按钮来重新编程这种行为吗?如果是这样的话,那听起来像是平台问题。关于使用CE,需要记住的一点是,由于OEM对操作系统的实际实现方式有很大的控制权,因此您永远无法排除平台错误的行为

MessageBox.Show("Please insert Correct Username and Password.", "Login Error",
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.Focus();

这是一个简单的解决办法。不需要运行任何JavaScript或其他C代码。

还有其他有趣的因素吗?看来你所拥有的一切都应该发挥作用。如果您创建了一个新表单并在该新表单上执行ShowModal,会发生什么情况?您是否看到了相同的行为?否-CF不支持此操作,即使它支持此操作,也无法解决问题请参见我的答案