【问题标题】:custom dialog with a text field in winmobilewinmobile中带有文本字段的自定义对话框
【发布时间】:2010-09-23 02:14:36
【问题描述】:

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

感谢您的帮助,伙计们!

【问题讨论】:

  • 您在 Visual Studio、C# 和 winforms 开发方面有多少经验?
  • 这将决定答案的详细程度。 :)
  • 我在 C++ 方面非常有经验,所以我通常可以大致了解...我已经掌握了相当多的 C# 知识。把它放在我身上!

标签: c# windows-mobile smartphone


【解决方案1】:

我假设您基本上想要一个自定义对话框来返回用户输入的字符串。一种方法是在项目中添加对 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;
    }
}

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

【讨论】:

    【解决方案2】:

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

    alt text 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 按钮就会关闭您的对话框,即使它看起来不像,因为它实际上不在表格。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 2014-04-08
        相关资源
        最近更新 更多