настраиваемый диалог с текстовым полем в winmobile
-
08-07-2019 - |
Вопрос
Мне кажется, что у меня есть простое настраиваемое диалоговое окно, например окно сообщений, с меткой и TextBox. Если есть простой способ сделать это, извините! Я действительно не очень разбираюсь в диалогах. Р>
Спасибо за любую помощь, ребята!
Решение
Вот как сделать небольшое настраиваемое диалоговое окно в Windows Mobile, которое выглядит следующим образом:
альтернативный текст http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg
Добавьте форму в свой проект и установите для свойства FormBorderStyle значение None. Это позволяет изменять размеры и расположение формы, а также означает, что у нее нет рамки или заголовка, и пользователь не может ее переместить.
Итак, вы должны подделать все три. Самый простой способ подделать границу и строку заголовка - создать BackColor вашей формы SystemColors.WindowFrame, а затем поместить метку (где на рисунке написано «Диалог») с BackColor = SystemColors.Highlight и ForeColor = SystemColor. Выделите текст (и выделите жирным шрифтом), затем поместите панель с BackColor = SystemColors.Window, где вы видите белый цвет на рисунке. Вы должны изменить положение и размеры метки и панели, чтобы у вас была граница в 1 пиксель (это просто BackColor вашей формы, просвечивающий).
Чтобы разрешить перетаскивание формы с помощью фальшивого заголовка, добавьте этот код в форму (и, конечно, вам также нужно связать события):
private bool _Moving = false;
private Point _Offset;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
_Moving = true;
_Offset = new Point(e.X, e.Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (_Moving)
{
Point newlocation = this.Location;
newlocation.X += e.X - _Offset.X;
newlocation.Y += e.Y - _Offset.Y;
this.Location = newlocation;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (_Moving)
{
_Moving = false;
}
}
Еще одна проблема заключается в том, что, поскольку в действительности нет заголовка, пользователь не может закрыть форму. Вы должны добавить кнопку OK (или Закрыть) и поместить ее в событие нажатия кнопки:
this.DialogResult = DialogResult.OK;
Обычно вы бы использовали событие мыши в строке заголовка для облегчения перетаскивания, но элемент управления надписью не имеет никаких событий мыши. С помощью этого кода вы можете фактически захватить любое место на форме и перетащить его, за исключением того, что панель блокирует это и делает строку заголовка единственным местом для захвата и перетаскивания.
Мой другой ответ содержит более подробную информацию о получении информации из пользовательских диалогов.
Обновление: на самом деле, очевидного способа закрыть форму без полей без добавления кнопки «ОК» нет. Пока вы не установите для свойства формы ControlBox значение False, кнопка «ОК» или «X» в верхнем правом углу экрана «Сегодня» закроет диалоговое окно, даже если оно не будет выглядеть так, как на самом деле на форма. р>
Другие советы
Если вам нужно сверхпростое, но [t] некрасивое решение, вы можете включить в свой проект ссылку на Microsoft.VisualBasic, которая позволяет вам использовать функцию VB InputBox, например:
string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
"title text", "default value", 0, 0);
Диалог занимает весь экран, но прост в использовании. Но невероятно некрасиво, как я уже говорил.
Я предполагаю, что вы в основном хотите настраиваемое диалоговое окно, которое возвращает строку, введенную пользователем. Одним из способов является добавление в ваш проект ссылки на Microsoft.VisualBasic, которая дает вам доступ к методу InputBox, который в основном представляет собой окно сообщения с текстовым полем на нем. Но это не весело, и я не уверен, что это все равно будет работать на смартфоне.
Чтобы развернуть свою собственную, вы просто добавляете форму (с именем CustomDialog) в свой проект и перетаскиваете в нее текстовое поле (textBox1), метку (label1) и кнопку (помеченную " OK ").
Чтобы установить текст метки, добавьте параметр в конструктор формы следующим образом:
public CustomDialog(string textCaption)
{
label1.Text = textCaption;
}
Чтобы представить введенный текст вызывающей стороне, добавьте этот код в форму:
public override string Text
{
get
{
return textBox1.Text;
}
}
В событие нажатия кнопки ОК введите этот код:
this.DialogResult = DialogResult.OK; // this will close the form, too
Чтобы использовать это диалоговое окно из основной формы, вы создаете экземпляр этой формы, показываете его, проверяете, нажали ли кнопку «ОК», и затем считываете его свойство Text (которое возвращает введенное пользователем) следующим образом: р>
using (CustomDialog dialog = new CustomDialog("What is your name"))
{
if (dialog.ShowDialog(this) == DialogResult.OK)
{
string enteredText = dialog.Text;
}
}
Вы можете полюбить, но это основы.