Windows Phone 應用程式上傳被退原因分享 - MessageBox 與 TextBox.Focus()

  • 4905
  • 0
  • 2013-04-22

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() 的部分註解掉,如果有更好的做法歡迎大家提供。