.NET CF - Установить высоту формы на основе состояния InputPanel - PullRequest
2 голосов
/ 01 июня 2010

Итак, у меня есть проект C # для телефонов с Windows Mobile, и я пытаюсь работать с InputPanel. В частности, у меня есть одна форма со стеком меток и текстовых блоков, которые собирают пользовательский ввод. У меня есть InputPanel, которая предупреждает меня, когда пользователь открывает SIP. Пока все отлично работает. Когда я получаю сообщения об изменении статуса SIP, я хочу изменить высоту формы, что кажется невозможным.

Вот мой обработчик событий для моей InputPanel:

void m_InputPanel_EnabledChanged(object sender, EventArgs e)
{
    // :(  this assignment operation doesn't work and it doesn't               
    this.ClientSize = inputPanel1.VisibleDesktop.Size;
    // doesn't work
    this.Size = inputPanel1.VisibleDesktop.Size;
    // assignment operation works, but isn't very useful
    this.visibleHeight = inputPanel1.VisibleDesktop.Height;
    this.InitializeUI();
}

Когда я говорю, что операция присваивания не работает, я имею в виду, что значения не изменяются в отладчике. Я могу понять, что, возможно, я не могу изменить размер формы, но не могу понять, почему попытка изменить ее не вызвала бы исключение или ошибку компилятора.

У меня форма WindowState установлена ​​в значение Normal вместо Maximized, но это не имеет значения.

Кроме того, я прочитал http://www.christec.co.nz/blog/archives/42 эту страницу, которая рассказывает мне, как я должен это делать, но я не могу легко поместить все свои элементы управления в Panel, потому что я использую кучу пользовательские элементы для управления альфа-фоном.

1 Ответ

4 голосов
/ 01 июня 2010

Изменение высоты и ширины формы в .NET CF не оказывает никакого влияния, , если его FormBorderStyle не установлено на None.

Тем не менее, делать это не очень хорошая идея в вашем случае, так как вы на самом деле не хотите форму без полей. В вашем случае нужно правильно разместить все свои элементы управления (надписи и текстовые поля) на Panel (который, конечно же, находится в вашей форме), а затем изменить размер панели, когда SIP открывается и закрывается.

Редактировать: Поскольку я видел такой интерфейс в Windows Mobile, позвольте мне дать вам несколько советов по пользовательскому интерфейсу. Правило № 1 для меня с приложениями .NET CF гласит: «никогда не используйте SIP ни при каких обстоятельствах». SIP, конечно, совершенно непригоден для использования без стилуса и не очень часто использует со стилусом, особенно с экраном, слегка выровненным.

Если вы должны нарушить правило № 1 (и, конечно, вы должны нарушить это правило для большинства видов ввода текста в произвольной форме), то ваш пользовательский интерфейс должен, по крайней мере, быть вежливым по отношению к пользователю и делать две вещи:

  1. Не изменяйте размер и не переставляйте форму в ответ на открытие и закрытие SIP. Если для вашей формы требуется SIP, оставьте постоянное место внизу для размещения.
  2. Не заставляйте пользователя открывать и закрывать SIP. Если для вашей формы требуется SIP, откройте SIP при загрузке формы и закройте SIP при закрытии формы.

Наконец, я обычно находил, что проще использовать статические методы, такие как this , чем добавлять InputControl к каждой из моих форм. Я считаю, что InputControls - это боль, и иногда они мешают друг другу, если у вас одновременно открыто несколько форм с InputControl.

...