Во-первых, в настоящее время я использую только Windows Mobile 5 (WM5).(Мне пришлось перейти от PocketPC 2003 пару лет назад. LOL)
Я обнаружил, что определение размера окна формы не очень хорошо работает на мобильных устройствах, а показ / скрытие нескольких форм неудобнои никогда не ведет себя так, как вы хотите.
Тем не менее, убедитесь, что в вашей главной форме WindowState
установлено значение Максимально .
Я также установил ControlBox
и MinimizeBox
до Ложь , если это поможет.
Вместо использования нескольких форм будет гораздо приятнее, если вы просто будете использовать Панели в качестве форм с Основной формой как своего рода контейнер MDI(плохой выбор слов, но это то, что я делаю).
В моем Дизайнерском представлении каждая панель - это просто небольшой ящик, полный элементов управления.
- Для работы с каждой панелью выберите ее в конструкторе Visual Studio , и вы увидите поле положения (стрелки вверх и вниз, влево и вправо).
- Щелкните правой кнопкой мыши поле положения и выберите Перевести на передний план .
- Теперь перейдите в Свойства панели управления и установите
Dock
на Заполнить . - Пока эта панель работает в полноэкранном режиме, добавьте все свои кнопки, текстовые поля и т. Д.с соответствующими именами.Имена, такие как
pnl1_button1
и pnl2_button1
, легче понять в вашем коде, чем значения по умолчанию VS button1
и button2
. - Когда вы закончите с представлением этой панели, вернитесь к
Dock
свойств и установите его на Нет . - Перейдите к следующему элементу управления панели.
Я обнаружил, что это также помогает поддерживать небольшойэскиз ваших панелей с их именами и именами элементов управления.
В событии Load
вашей основной формы установите для каждого свойства Panel
Dock
значение DockStyle.Fill .Затем, если вы хотите показать одну форму, просто позвоните Panel1.BringToFront()
вместо dialog.Show()
.
Разработка для мобильных устройств не сложна, но отличается.:)
РЕДАКТИРОВАТЬ:
В файле проекта Program.cs я храню следующие статические инструменты, которые я могу использовать для включения иВЫКЛЮЧИТЕ меню Пуск (не очень хорошо работает в WM5, но я все еще получил его в своем коде из моей версии PocketPC).
Мне не нужно было открывать этот проект в течение года или около того,но все должно быть в силе.Дай им попробовать.Если я что-то пропустил, просто дайте мне знать.
Как только это будет вставлено в файл Program.cs вашего проекта, просто вызовите Program.ShowWindowsMenu(false);
, когда ваша программа запустится, и Program.ShowWindowsMenu(true);
когда ваша программа завершает работу.
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:
Объявите частный статический экземпляр вашей главной формы, а затем оберните его в процедуру try .... catchвнутри файла Program.cs
вашего проекта, например:
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);
}
}