winmobile中带有文本字段的自定义对话框

我希望有一个简单的自定义对话框,如消息框,具有标签和TextBox。 如果有一种简单的方法可以做到这一点,抱歉! 我真的不太熟悉对话的东西。

谢谢你的帮助,伙计们!

以下是如何在Windows Mobile中创建一个小型自定义对话框,如下所示:

alt text http://sofzh.miximages.com/c%23/www.freeimagehosting.net

将表单添加到项目中,并将其FormBorderStyle属性设置为None。 这样可以调整表单的大小和位置,但也意味着它没有边框或标题栏,并且用户无法移动它。

所以你必须假装这三个。 伪造边框和标题栏的最简单方法是制作表单SystemColors.WindowFrame的BackColor,然后使用BackColor = SystemColors.Highlight和ForeColor = SystemColor.HighlightText放置标签(图中的“Dialog”) (并加粗字体),然后使用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(eX, eY); } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (_Moving) { Point newlocation = this.Location; newlocation.X += eX - _Offset.X; newlocation.Y += eY - _Offset.Y; this.Location = newlocation; } } private void Form1_MouseUp(object sender, MouseEventArgs e) { if (_Moving) { _Moving = false; } } 

另一个问题是因为没有真正的标题栏,用户无法关闭表单。 您必须添加一个OK(或关闭)按钮,并将其放在按钮的Click事件中:

 this.DialogResult = DialogResult.OK; 

通常,您可以在标题栏上使用鼠标事件来方便拖动,但标签控件没有任何鼠标事件。 使用此代码,您实际上可以抓取窗体上的任何位置并拖动它,除了面板阻止此操作并使标题栏成为抓取和拖动的唯一位置。

我的另一个答案有关于从自定义对话框中获取信息的更多详细信息。

更新:实际上,没有明显的方法可以在不添加自己的OK按钮的情况下关闭无边框表单。 只要您没有将窗体的ControlBox属性设置为False,“今日”屏幕右上角的“确定”或“X”按钮将关闭对话框,即使它看起来不像,因为它实际上不在形成。

如果你想要一个超级简单但很丑陋的解决方案,你可以在项目中包含一个对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; } } 

在OK按钮的click事件中,输入以下代码:

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

你可以变得更加漂亮,但这些都是基础。