4

我正在寻找一个简单的自定义对话框,比如一个消息框,它有一个标签和一个文本框。如果有一个简单的方法可以做到这一点,对不起!我真的不精通对话的东西。

感谢您的帮助,伙计们!

4

3 回答 3

11

以下是如何在 Windows Mobile 中制作一个如下所示的小型自定义对话框:

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

向您的项目添加一个表单,并将其 FormBorderStyle 属性设置为 None。这允许表单调整大小和位置,但也意味着它没有边框或标题栏,用户无法移动它。

所以你必须伪造所有三个。伪造边框和标题栏的最简单方法是制作表单 SystemColors.WindowFrame 的 BackColor,然后使用 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;

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

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

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

于 2008-11-20T15:45:54.637 回答
1

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

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

该对话框占据了整个屏幕,但使用起来很简单。但正如我所提到的,它非常丑陋。

于 2008-11-20T17:29:34.507 回答
0

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

要自己滚动,您只需将一个表单(名为 CustomDialog)添加到您的项目中,然后将一个文本框 (textBox1)、一个标签 (label1) 和一个按钮(标记为“OK”)拖到它上面。

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

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

要将输入的文本公开给调用者,请将此代码添加到表单中:

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

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

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

于 2008-11-19T18:11:47.277 回答