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

感谢您的帮助,伙计们!

有帮助吗?

解决方案

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

替代文字http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

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

所以你必须假装这三个。伪造边框和标题栏的最简单方法是制作表单SystemColors.WindowFrame的BackColor,然后使用BackColor = SystemColors放置一个标签(在图片中显示<!> quot; Dialog <!>“;) .Highlight和ForeColor = SystemColor.HighlightText(并加粗字体),然后放置一个带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按钮将关闭你的对话框,即使它看起来不像它,因为它实际上不在形式。

其他提示

如果你想要一个超级简单但很丑的解决方案,你可以在你的项目中包含一个对Microsoft.VisualBasic的引用,它允许你像这样使用VB函数InputBox:

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

该对话框占用整个屏幕,但使用起来很简单。但正如我所提到的那样令人难以置信的丑陋。

我假设你基本上想要一个自定义对话框,它返回用户输入的字符串。一种方法是向项目添加对Microsoft.VisualBasic的引用,这使您可以访问InputBox方法,该方法基本上是一个带有文本框的消息框。但这并不好玩,我不确定它是否适用于智能手机。

要自己滚动,只需将一个表单(名为CustomDialog)添加到项目中,然后拖动文本框(textBox1),标签(label1)和按钮(标记为<!> quot; OK <!> quot;在它上面。

要设置标签文本,请在表单的构造函数中添加一个参数,如下所示:

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