gpt4 book ai didi

c# - MessageBox 的问题

转载 作者:行者123 更新时间:2023-11-30 18:07:49 24 4
gpt4 key购买 nike

我在使用模态消息框时遇到问题。

情况是这样的

  • 用户从表单中选择 xx
  • 出现消息框
  • 用户打开嵌入式软件键盘(内置键盘,来自设备)
  • 用户关闭键盘
  • MessageBox 失去焦点(怎么会?它应该是模态的!)并且主窗体显示在前台
  • 应用程序阻塞,因为用户现在无法关闭 MessageBox。

这是 MessageBox 的代码片段。

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

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

最佳答案

这实际上是 Windows CE 下的某种预期行为(我并不是说它是正确的,只是预期的)。

当您单击桌面角落的 SIP 按钮时,您的整个应用程序将失去焦点,焦点将传递到任务栏。您可以通过单击应用程序的任务栏按钮看到类似的“奇怪” - MessageBox 将失去焦点,即使根据所有权利您应该只是将焦点发送到已经运行的应用程序。

通过像这样更改 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 的 CE 5.0 设备上进行了测试,MessageBox 在 CF 和 P/Invoke 版本中都保持在最前面。

您能否使用非常基本的应用程序(即只有一个表单、一个按钮)重现此行为?如果是这样,那么这听起来像是一个平台问题。关于使用 CE 需要记住的一件事是,由于 OEM 对操作系统的实际实现方式有很多控制权,因此您永远不能排除行为的平台错误。

关于c# - MessageBox 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3738115/

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