Pertama, saya hanya menjalankan Windows Mobile 5 (WM5) hari ini. (Saya harus pindah dari PocketPC 2003 beberapa tahun yang lalu. LOL)
Saya menemukan bahwa menentukan Ukuran Jendela Formulir tidak berfungsi dengan baik pada perangkat seluler, dan menampilkan/menyembunyikan beberapa formulir adalah hal yang janggal dan tidak pernah berperilaku seperti yang Anda inginkan.
Namun, pastikan Formulir Utama Anda WindowState
disetel ke Dimaksimalkan.
Saya juga menyetel ControlBox
dan MinimizeBox
ke False, jika itu membantu.
Daripada menggunakan banyak formulir, akan terlihat jauh lebih bagus jika Anda hanya menggunakan Panel sebagai formulir Anda dengan Formulir Utama sebagai semacam wadah MDI (pilihan kata yang buruk, tapi itulah yang saya lakukan).
Dalam Tampilan Desainer saya, setiap panel hanyalah sebuah kotak kecil yang penuh dengan kontrol.
- Untuk bekerja dengan setiap panel, pilih panel tersebut di desainer Visual Studio, dan Anda akan melihat kotak posisi (panah atas & bawah dan kiri & kanan).
- Klik kanan kotak posisi dan klik Bawa ke Depan.
- Sekarang pergilah ke Properti kontrol panel dan atur
Dock
ke Isi.
- Meskipun panel ini layar penuh, tambahkan semua tombol, kotak teks, dll. dengan nama yang sesuai. Nama seperti
pnl1_button1
dan pnl2_button1
lebih mudah dipahami dalam kode Anda dibandingkan nama default VS button1
dan button2
.
- Ketika Anda selesai dengan tampilan desain panel ini, kembali ke properti
Dock
dan setel kembali ke Tidak Ada.
- Lanjutkan ke kontrol panel berikutnya.
Menurut saya, memelihara sketsa kecil panel Anda dengan nama dan nama kontrolnya juga membantu.
Dalam peristiwa Load
formulir utama Anda, tetapkan setiap properti Dock
Panel
ke DockStyle.Fill. Kemudian, jika Anda ingin menampilkan satu formulir, panggil saja Panel1.BringToFront()
, bukan dialog.Show()
.
Pengembangan seluler tidaklah sulit, tetapi berbeda. :)
EDIT:
Dalam file Program.cs proyek, saya menyimpan alat statis berikut yang dapat saya gunakan untuk MENGAKTIFKAN dan MENONAKTIFKAN Menu Mulai (tidak berfungsi dengan baik di WM5, namun saya masih memilikinya dalam kode saya dari versi PocketPC saya).
Saya belum membuka proyek ini dalam satu tahun atau lebih, tetapi semuanya harus valid. Cobalah. Jika saya melewatkan sesuatu, beri tahu saya.
Setelah ini ditempelkan ke file Program.cs proyek Anda, panggil saja Program.ShowWindowsMenu(false);
saat program Anda dimulai dan Program.ShowWindowsMenu(true);
saat program Anda keluar.
static IntPtr _taskBar;
static IntPtr _sipButton;
public enum Notify_Events {
NOTIFICATION_EVENT_NONE = 0,
NOTIFICATION_EVENT_TIME_CHANGE = 1,
NOTIFICATION_EVENT_SYNC_END = 2,
NOTIFICATION_EVENT_DEVICE_CHANGE = 7,
NOTIFICATION_EVENT_RS232_DETECTED = 9,
NOTIFICATION_EVENT_RESTORE_END = 10,
NOTIFICATION_EVENT_WAKEUP = 11,
NOTIFICATION_EVENT_TZ_CHANGE = 12,
NOTIFICATION_EVENT_OFF_AC_POWER,
NOTIFICATION_EVENT_ON_AC_POWER
}
public enum WindowPosition {
SWP_HIDEWINDOW = 0x0080,
SWP_SHOWWINDOW = 0x0040
}
[DllImport("coredll.dll", EntryPoint = "FindWindowW", SetLastError = true)]
public static extern IntPtr FindWindowCE(string lpClassName, string lpWindowName);
[DllImport("coredll.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
static void ShowWindowsMenu(bool enable) {
try {
if (enable) {
if (_taskBar != IntPtr.Zero) {
SetWindowPos(_taskBar, IntPtr.Zero, 0, 0, 240, 26, (int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
}
} else {
_taskBar = FindWindowCE("HHTaskBar", null); // Find the handle to the Start Bar
if (_taskBar != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_taskBar, IntPtr.Zero, 0, 0, 0, 0, (int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
}
}
} catch (Exception err) {
ErrorWrapper(enable ? "Show Start" : "Hide Start", err);
}
try {
if (enable) {
if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_sipButton, IntPtr.Zero, 0, 0, 240, 26, (int)WindowPosition.SWP_SHOWWINDOW); // display the start bar
}
} else {
_sipButton = FindWindowCE("MS_SIPBUTTON", "MS_SIPBUTTON");
if (_sipButton != IntPtr.Zero) { // If the handle is found then hide the start bar
SetWindowPos(_sipButton, IntPtr.Zero, 0, 0, 0, 0, (int)WindowPosition.SWP_HIDEWINDOW); // Hide the start bar
}
}
} catch (Exception err) {
ErrorWrapper(enable ? "Show SIP" : "Hide SIP", err);
}
}
static void ErrorWrapper(string routine, Exception e) {
if (!String.IsNullOrEmpty(e.Message)) {
MessageBox.Show(e.Message, routine, MessageBoxButtons.OKCancel, MessageBoxIcon.None, 0);
}
}
EDIT2:
Deklarasikan instance statis pribadi dari formulir utama Anda, lalu bungkus dalam rutinitas try....catch di dalam file Program.cs
proyek Anda seperti ini:
static Form1 ppcForm = null;
static void Main() {
ShowWindowsMenu(false);
try {
ppcForm = new Form1();
Application.Run(ppcForm );
} catch (Exception err) {
if (!String.IsNullOrEmpty(err.Message)) {
ErrorWrapper("Mobile Form (Program)", err);
}
} finally {
ShowWindowsMenu(true);
}
}
person
jp2code
schedule
12.04.2011