1.如何真正的退出程序,而不是隱藏窗體?
Windows Mobile中當你點擊X的時候,并不是真正的關閉窗體,而是隱藏窗體,需要在應用程序的每個Form中調用一個函數才可以。




每個窗體的Closed事件中加入Application.Exit();才能真正的退出程序。
2.如何讓窗體跟著輸入法窗口上移?
當輸入文字時需要打開輸入法,而當打開輸入法的時候輸入法會直接蓋掉下層的程序界面,導致有時候窗體下方的控件無法進行操作(輸入文字,點擊按鈕等),那么這個時候就需要我們在輸入法狀態變更的時候出發一些事件,讓輸入法窗口不要蓋住程序。
首先每次創建Form,最好都先添加一個panel做控件的上層容器,設定好相對panel的位置,這樣控件才會根據panel的變化而變化。之后給InputPanel的EnabledChanged事件加入下面的代碼:












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);
電信: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);
修改連接的優先級: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> ";
" <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
{
}
}
{
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
{
}
}
---------------------------------------------------------
專注移動開發
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian