我希望有一个简单的自定义对话框,如消息框,它有一个标签和一个TextBox。如果有一种简单的方法可以做到这一点,抱歉!我真的不太熟悉对话的东西。
感谢您的帮助,伙计们!
答案 0 :(得分:11)
以下是如何在Windows Mobile中创建一个小型自定义对话框,如下所示:
alt text http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg
将表单添加到项目中,并将其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(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(或关闭)按钮,并将其放在按钮的Click事件中:
this.DialogResult = DialogResult.OK;
通常,您可以在标题栏上使用鼠标事件以方便拖动,但标签控件没有任何鼠标事件。使用此代码,您实际上可以抓取表单上的任何位置并拖动它,除了面板阻止此项并使标题栏成为唯一可以抓取和拖动的位置。
我的其他答案有关于从自定义对话框中获取信息的更多详细信息。
更新:实际上,没有明显的方法可以在不添加自己的OK按钮的情况下关闭无边框表单。只要你没有将你的窗体的ControlBox属性设置为False,今日屏幕右上角的OK或X按钮将关闭你的对话框,即使它看起来不像它,因为它实际上不在形式。
答案 1 :(得分:1)
如果你想要一个超级简单但很丑的解决方案,你可以在你的项目中包含一个对Microsoft.VisualBasic的引用,它允许你像这样使用VB函数InputBox:
string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
"title text", "default value", 0, 0);
该对话框占用整个屏幕,但使用起来很简单。但正如我所提到的那样令人难以置信的丑陋。
答案 2 :(得分: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;
}
}
你可以变得更加漂亮,但这些都是基础。