настраиваемый диалог с текстовым полем в winmobile

StackOverflow https://stackoverflow.com/questions/302680

  •  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;
    }
}

Вы можете полюбить, но это основы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top