2008-11-19 8 views
4

Я ищу, чтобы иметь простое пользовательское диалоговое окно, такое как окно сообщения, которое имеет метку и текстовое поле. Если есть простой способ сделать это, извините! Я действительно не очень разбираюсь в материалах диалога.пользовательский диалог с текстовым полем в winmobile

Спасибо за помощь, ребята!

+0

Сколько опыта у вас есть с разработкой Visual Studio, C# и winforms? – MusiGenesis 2008-11-19 17:25:32

ответ

11

Вот как сделать небольшое диалоговое окно пользовательского в Windows Mobile, который выглядит следующим образом:

alt text http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

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

Итак, вы должны подделать все три. Самый простой способ подделать границу и строку заголовка - сделать BackColor вашей формы SystemColors.WindowFrame, а затем поместить ярлык (там, где он говорит «Диалог» на картинке) с помощью BackColor = SystemColors.Highlight и ForeColor = SystemColor.HighlightText (и полужирным шрифтом), затем поместите панель с BackColor = SystemColors.Window, где вы видите белый на картинке. Вы должны подстроить позиции и размеры метки и панели, чтобы у вас была 1-пиксельная рамка (которая является только обратным цветом вашей формы).

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

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

Еще одна проблема заключается в том, что потому что нет реальной панели заголовка, пользователю не удастся закрыть форму.Вы должны добавить ОК (или Закрыть) кнопку, и поместить его в Click событие кнопки:

this.DialogResult = DialogResult.OK; 

Обычно вы будете использовать событие мыши на строке заголовка для облегчения перетаскивания, но контроль ярлык не имеют какие-либо события мыши. С помощью этого кода вы можете захватить в любом месте формы и перетащить его, за исключением того, что панель блокирует это и делает панель заголовка единственным местом для захвата и перетаскивания.

В моем другом ответе есть более подробная информация о получении информации из пользовательских диалогов.

Обновление: на самом деле, есть только Очевидный способ закрыть безграничную форму без добавления собственной кнопки OK. Пока вы не устанавливаете свойство ControlBox своей формы False, кнопка «ОК» или «X» в верхнем правом углу экрана «Сегодня» закроет ваше диалоговое окно, даже если оно не выглядит так, как если бы оно не было на форма.

0

Я предполагаю, что вы в основном хотите создать собственное диалоговое окно, которое возвращает строку, введенную пользователем. Один из способов - добавить ссылку на Microsoft.VisualBasic в свой проект, который дает вам доступ к методу InputBox, который в основном представляет собой окно с текстовым полем на нем. Но это не весело, и я не уверен, что все равно это будет работать на смартфоне.

Чтобы свернуть самостоятельно, просто добавьте в проект форму (с именем CustomDialog) и перетащите текстовое поле (textBox1), метку (label1) и кнопку (помеченную «ОК») на нее.

Чтобы задать текст метки, добавьте параметр в конструктор формы, как это:

public CustomDialog(string textCaption) 
{ 
    label1.Text = textCaption; 
} 

Выставить введенный текст вызывающих, добавьте этот код в форму:

public override string Text 
{ 
    get 
    { 
     return textBox1.Text; 
    } 
} 

В событии Click кнопки OK введите этот код:

this.DialogResult = DialogResult.OK; // this will close the form, too 

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

using (CustomDialog dialog = new CustomDialog("What is your name")) 
{ 
    if (dialog.ShowDialog(this) == DialogResult.OK) 
    { 
     string enteredText = dialog.Text; 
    } 
} 

Вы можете получить новые идеи, но это основы.

1

Если вы хотите супер-простой, но [т] некрасиво решение, вы можете включить ссылку на ваш проект в Microsoft.VisualBasic, который позволяет использовать функцию VB InputBox так:

string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text", 
    "title text", "default value", 0, 0); 

диалог занимает весь экран, но прост в использовании. Но я невероятно уродлив, как я уже говорил.