Это на самом деле несколько ожидаемое поведение в Windows CE (я не говорю, что это правильно, просто ожидалось).
Когда вы нажимаете кнопку SIP внизу в углу рабочего стола, все ваше приложение теряет фокус, и фокус передается на панель задач. Вы можете увидеть похожую «странность», нажав на кнопку панели задач вашего приложения - MessageBox потеряет фокус, хотя по всем правам вы должны просто направлять фокус на приложение, которое уже запущено.
Вы можете увидеть, что это не ошибка CF, изменив свой вызов MessageBox следующим образом:
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. Я только что проверил на устройстве CE 5.0 на базе ARM, которое у меня есть на рабочем столе, и MessageBox остается лучшим в версиях CF и P / Invoke.
Сможете ли вы воспроизвести это поведение с помощью очень простого приложения (т. Е. Только одна форма, одна кнопка)? Если так, то это похоже на проблему с платформой. При использовании CE следует помнить одну вещь: поскольку OEM-производитель имеет большой контроль над реализацией ОС, вы никогда не сможете исключить ошибку платформы для поведения.