C # Windows Mobile SIP InputPanel: Как изменить размер моего TextBox? - PullRequest
0 голосов
/ 05 ноября 2011

Использование программной панели (SIP) для ввода текста в моем приложении C # WinMobile CF 2.0 .

Внизу есть текстовое поле, которое я хочу увеличивать при нажатии SIP.

SIP вызывается правильно, когда TextBox получает фокус, но я не могу заставить TextBox вырасти настолько, чтобы увидеть текст.

TextBox пристыкован ко дну.

Я установил точки останова в своем коде, и выполняется подпрограмма SIP_EnabledChanged, а txtNote.Size изменяется ... но размер моего TextBox не изменяется на дисплее.

Почему?

using Microsoft.WindowsCE.Forms;

int startH = txtNote.Size.Height;
// (In the designer):
this.inputPanel1.EnabledChanged += new System.EventHandler(this.SIP_EnabledChanged);

void Form1_Load(object sender, EventArgs e) {
  inputPanel1.Enabled = false;
  startH = txtNote.Size.Height;
}

void SIP_EnabledChanged(object sender, EventArgs e) {
  SuspendLayout();
  int height = inputPanel1.Enabled ? startH + 80 : startH;
  txtNote.Size = new Size(txtNote.Size.Width, height);
  ResumeLayout();
}

TextBox displayed SIP displayed

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Если он пристыкован, а не закреплен, это первое, что может быть здесь. Я скептически отношусь к тому, что вы действительно хотите изменить размер текстового поля. Я обычно обрабатываю изменения на панели ввода, но перемещаю всю форму вверх (- направление) на высоту высоты SIP, а не изменяю размеры элементов управления. Эта форма выглядит немного иначе, и, возможно, у вас есть один элемент управления входом? Если это так, я буду уверен, что это первый элемент управления в z-порядке, и просто поместите его над SIP, когда он отобразится.

0 голосов
/ 15 ноября 2011

Вчера получил ответ на MSDN >> ЗДЕСЬ << </a>, который мне удалось изменить для работы.

Ключ, очевидно, в том, чтобы установить Bounds, а неSize или Location.

Вот что я сделал:

int startY;

void Form1() : Form {
  InitializeComponent();
  startY = txtNote.Location.Y; // only set here.
}
// Method below fires whenever the Soft Input Panel changes
void SIP_EnabledChanged(object sender, EventArgs e) {
  int locationY = startY;
  if (inputPanel1.Enabled) {
    locationY -= inputPanel1.Bounds.Height;
  }
  txtNote.SuspendLayout();
  // setting the Bounds was the key to getting this to work!
  txtNote.Bounds = new Rectangle(
    txtNote.Location.X,
    locationY,
    txtNote.Size.Width,
    txtNote.Size.Height
  );
  txtNote.ResumeLayout();
  txtNote.Refresh();
}

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

...