這實際上是在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上方。我剛剛在我桌面上的基於ARM的CE 5.0設備上進行了測試,並且MessageBox在CF和P/Invoke版本中都保持最佳狀態。
您是否可以用一個非常基本的應用程序(即只有一個窗體,一個按鈕)重現此行爲?如果是這樣,那聽起來像是一個平臺問題。關於使用CE的一點要記住的是,由於OEM對操作系統的實際操作有很大的控制權,所以你絕不能排除行爲的平臺錯誤。
還有其他有趣的因素嗎?看起來你應該「只是工作」。如果你創建一個新窗體並在這個新窗體上執行'ShowModal()',會發生什麼?你會看到相同的行爲嗎? – Nate 2010-09-17 18:59:26