Windows Phone 應用程式上傳被退原因分享 - MessageBox 與 TextBox.Focus()
被退理由
前些日子公司同事開發 Windows Phone 的 App 被退,被退理由如下
Comments: The applications leaves the on-screen keyboard open after the user deactivates the application. And Pressing
the back button does not close the keyboard.
Steps to Reproduce:
1. Launch the application.
2. Press on "OK" button.
3. The application will prompt "輸入錯誤" with a dialog box.
4. Deactivate the application by pressing the Start button.
5. Observe the on-screen keyboard is still visible, and can not be closed.
被退原因重現
以下是一個簡單的程式範例重現此問題,功能是在 TextBox (Name: tbNum) 輸入資料,然後按 Button (Name: btnOK),當輸入的資料並非 Integer 時,顯示 MessageBox 錯誤訊息,並且將 TextBox 清空,然後將焦點設定給 TextBox。
以下是 App 畫面
以下是測試程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace PhoneAppTestFocus
{
public partial class MainPage : PhoneApplicationPage
{
// 建構函式
public MainPage()
{
InitializeComponent();
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
int iNum;
if (int.TryParse(tbNum.Text, out iNum) == false)
{
MessageBox.Show("輸入錯誤");
tbNum.Text = string.Empty;
tbNum.Focus();
}
}
}
}
接著進行測試,在模擬器下其實不會導致掛點,但是將程式放到 Windows Phone 手機裝置後,聽說會造成手機掛點必須重開機,有興趣的可以試試看
1. 在 TextBox 輸入非 Integer 資料,按下 Button,出現 MessageBox。
2. 然後這個時候,去按 Start Button 鍵,會發現鍵盤還留著。
問題小結
在 Windows Forms 開發時,MessageBox 後自動將焦點移動至有問題的控制項,這樣的做法還蠻常見的,但在 Windows Phone 卻可能造成問題。
目前處理方式是先將 Focus() 的部分註解掉,如果有更好的做法歡迎大家提供。