天天看點

Windows Mobile開發的一些小技巧

1.如何真正的退出程式,而不是隐藏窗體?

Windows Mobile中當你點選X的時候,并不是真正的關閉窗體,而是隐藏窗體,需要在應用程式的每個Form中調用一個函數才可以。

Windows Mobile開發的一些小技巧

         private   void  InfoMain_Closed( object  sender, EventArgs e)

Windows Mobile開發的一些小技巧
Windows Mobile開發的一些小技巧

         {

Windows Mobile開發的一些小技巧

            Application.Exit();

Windows Mobile開發的一些小技巧

        }

每個窗體的Closed事件中加入Application.Exit();才能真正的退出程式。

2.如何讓窗體跟着輸入法視窗上移?

當輸入文字時需要打開輸入法,而當打開輸入法的時候輸入法會直接蓋掉下層的程式界面,導緻有時候窗體下方的控件無法進行操作(輸入文字,點選按鈕等),那麼這個時候就需要我們在輸入法狀态變更的時候出發一些事件,讓輸入法視窗不要蓋住程式。

首先每次建立Form,最好都先添加一個panel做控件的上層容器,設定好相對panel的位置,這樣控件才會根據panel的變化而變化。之後給InputPanel的EnabledChanged事件加入下面的代碼:

Windows Mobile開發的一些小技巧

         private   void  inputPanel1_EnabledChanged( object  sender, EventArgs e)

Windows Mobile開發的一些小技巧
Windows Mobile開發的一些小技巧

         {

Windows Mobile開發的一些小技巧

            if (inputPanel1.Enabled)

Windows Mobile開發的一些小技巧
Windows Mobile開發的一些小技巧

            {

Windows Mobile開發的一些小技巧

                this.panel1.Dock = DockStyle.None;

Windows Mobile開發的一些小技巧

                this.panel1.Height = inputPanel1.VisibleDesktop.Height;

Windows Mobile開發的一些小技巧

            }

Windows Mobile開發的一些小技巧

            else

Windows Mobile開發的一些小技巧
Windows Mobile開發的一些小技巧

            {

Windows Mobile開發的一些小技巧

                this.panel1.Dock = DockStyle.Fill;

Windows Mobile開發的一些小技巧

            }

Windows Mobile開發的一些小技巧

        } 當輸入法打開的時候panel不再占據全屏,而是跟除了輸入法外的可視化範圍一樣高。輸入法關閉時,panel恢複占據全屏。當然panel的AutoScroll要設定為true。

3.如何建立非全屏Form?

首先需要你建立一個全屏的Form,然後将以下參數設定為指定值

ControlBox = false;

FormBorderStyle = none;

MinimizeBox = false;

WindowState = normal;

Size = 設定為你想要的大小即可。

這樣的非全屏窗體不帶邊框不帶标題,隻有一個光秃秃的Form。如果你需要那些邊框和标題使得界面更加美觀,則可以參考以下文章:

http://www.christec.co.nz/blog/archives/134

牽扯到了一些對底層的操作。

4. 【實用技巧】Windows Mobile 手機連接配接電腦時,如何使用GPRS上網,同時跟電腦保持連接配接。(USB和GPRS共存問題) (3-19 22:08)

5.如何提高Windows Mobile中 Http上傳檔案的穩定性?

其實上傳檔案最好還是用FTP,因為比較穩定,各方面也很成熟。如果是和業務系統相關的一些東西,也不要緊,用戶端上傳完成之後請求下服務端的一個服務,通知他業務資料上傳完畢,然後服務端去做一些操作,之後可以回應給用戶端就可以了。

但如果非要用HTTP的話,也不要緊,雖然無線網絡用HTTP傳輸檔案不是太穩定,但總體上還是不錯的,隻是你需要設計一套斷點續傳機制,來保證就算網絡發生異常了,也可以接着上次的再傳。除了使用斷點續傳機制,還有一個技巧,就是讓用戶端和服務端的連接配接逾時時間(ConnectionTimeout)盡可能的長些,比如設定為200秒,這是在開發過程中總結出來的,我測試過很多次,發現如果逾時時間很長的話,多數大檔案(> 500kb)其實一次就可以傳遞上去,之前傳不上去,多數是因為連接配接逾時,而服務端如果使用tomcat,抛出Socket read timeout異常之後,用戶端多數收不到,因為此時的用戶端還在朝Request中的Outputstream寫資料,還沒有走到request.GetResponse()這一步,這就造成了,用戶端發送完資料之後才知道用戶端異常了,浪費了很多流量,也降低了很多效率,大家可以注意一下。

6.如何建立GPRS連接配接?

移動:

XmlDocument configDoc = new XmlDocument();

configDoc.LoadXml(

                        "<wap-provisioningdoc>" +

                        "<characteristic type=\"CM_GPRSEntries\">" +

                        "<characteristic type=\"xxx\">" +

                        "<parm name=\"DestId\" value=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\" />" +

                        "<parm name=\"UserName\" value=\"1\" />" +

                        "<parm name=\"Password\" value=\"1\" />" +

                        "<parm name=\"Domain\" value=\"\" />" +

                        "<characteristic type=\"DevSpecificCellular\">" +

                        "<parm name=\"GPRSInfoValid\" value=\"1\" />" +

                        "<parm name=\"GPRSInfoAccessPointName\" value=\"xx.js\" />" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</wap-provisioningdoc>"

                        );

ConfigurationManager.ProcessConfiguration(configDoc, false);

電信:

XmlDocument configDoc = new XmlDocument();

configDoc.LoadXml(

                        "<wap-provisioningdoc>" +

                        "<characteristic type=\"CM_GPRSEntries\">" +

                        "<characteristic type=\"jsmsa\">" +

                        "<parm name=\"DestId\" value=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\" />" +

                        "<parm name=\"UserName\" value=\"xxxx.js\" />" +

                        "<parm name=\"Password\" value=\"xxxx\" />" +

                        "<parm name=\"Domain\" value=\"\" />" +

                        "<parm name=\"Phone\" value=\"#777\"/>" +

                        "<parm name=\"DeviceType\" value=\"modem\"/>" +

                        "<parm name=\"DeviceName\" value=\"Cellular Line\"/>" +

                        "<parm name=\"Enabled\" value=\"1\"/>" +

                        "<parm name=\"RequirePw\" value=\"1\"/>" +

                        "<parm name=\"DeviceSpecificRAW\" value=\"b4010000b4010000b4010000010000000f0000000100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"/>" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</wap-provisioningdoc>"

                        );

ConfigurationManager.ProcessConfiguration(configDoc, false);

修改連接配接的優先級:

 string configpreferred = " <wap-provisioningdoc> " +

                                         " <characteristic   type=\"cm_planner\"> " +

                                         " <characteristic   type=\"preferredconnections\"> " +

                                         " <parm   name=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\"    value=\"jsmsa\"   /> " +

                                         " </characteristic> " +

                                         " </characteristic> " +

                                         " </wap-provisioningdoc> ";

7.發起和斷開連接配接

這兩個方法需要另外兩個類的協助

  public static void MakeConnection()

        {

            try

            {

                ConnectionManager connectManager = new ConnectionManager();

                int idx = -1;

                List<ConnectionManager.CONNMGR_DESTINATION_INFO> lstIdentifiers = connectManager.EnumConnDestinations();

                for (int i = 0; i < lstIdentifiers.Count; i++)

                {

                    if ("Internet 連接配接".Equals(lstIdentifiers[i].Description))

                    {

                        idx = i;

                        break;

                    }

                }

                if (idx > -1)

                {

                    connectManager.EstablishConnection((uint)idx);

                }

            }

            catch

            {

            }

        }

        public static void Disconnect()

        {

            try

            {

                RASManager.RASCONN[] conns = RASManager.GetRASConnections();

                if (conns != null && conns.Length > 0)

                {

                    foreach (RASManager.RASCONN conn in conns)

                    {

                        try

                        {

                            RASManager.HangUp(conn.hRasConnHandle);

                        }

                        catch (Exception ex)

                        {

                        }

                    }

                }

            }

            catch

            {

            }

        }

繼續閱讀