.NET控件,如Outlook的电子邮件地址文本控件

时间:2009-03-13 04:28:10

标签: c# winforms controls

我正在寻找一个.NET 2.0(Windows)应用程序的控件(或建立我自己的建议),它的工作方式类似于Outlook邮件窗口中的地址框(下面的蜜蜂)

Outlook Address Control http://content.screencast.com/users/Ryan_Farley/folders/Jing/media/a511142b-dd04-4885-ad1e-f2582c201723/2009-03-12_2116.png

控件基本上适用于每个电子邮件地址就像文本区域中的项目。我并不在乎让用户也像在Outlook中那样输入这个区域。我只是希望能够将这些完整的字符串(电子邮件地址)添加到文本区域或列表中,用户可以选择它们(但不能编辑),并可以通过列表删除或退格以删除整个项目(e邮件地址)。

任何人都知道有控制权可以做到这一点吗?有关建立自己的建议吗? (或者任何人都知道你甚至称之为控制权,所以我知道要google什么?)

2 个答案:

答案 0 :(得分:1)

这里有一些代码可以帮助您入门。

using System.Text;
using System.Windows.Forms;
using System;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox1.Text = "mail@mail.com; mail2@mail.com; mail3@mail.com";
        }

        private void textBox1_Click(object sender, EventArgs e)
        {
            int nextSpaceIndex = textBox1.Text.Substring(textBox1.SelectionStart).IndexOf(' ');
            int firstSpaceIndex = textBox1.Text.Substring(0, textBox1.SelectionStart).LastIndexOf(' ');
            nextSpaceIndex = nextSpaceIndex == -1 ? textBox1.Text.Length : nextSpaceIndex + textBox1.SelectionStart;
            firstSpaceIndex = firstSpaceIndex == -1 ? 0 : firstSpaceIndex;
            textBox1.SelectionStart = firstSpaceIndex;
            textBox1.SelectionLength = nextSpaceIndex - firstSpaceIndex;
        }
    }
}

当您点击电子邮件地址时,这将选择整个电子邮件地址。我不确定这是否是你想要的功能(虽然听起来像是这样),但它会让你开始。如果您想要执行除点击功能之外的其他事情,请加入TextBox提供的其他事件。

答案 1 :(得分:-2)

.NET 2.0 Windows Forms已经拥有它,它只是一个MaskedTextBox。

但是为了提供最大的输入有效性,例如电子邮件地址,您可以在更改MaskedTextBox中的文本时添加正则表达式(Regex)验证。

<强>更新 为了提供更多自定义,例如多个电子邮件地址,您还可以使用MaskedTextBox与RichTextBox结合使用,因为没有本机Windows窗体实现Outlook电子邮件地址输入控件的确切功能。

我也是这样做的,通过在RichTextBox控件获得焦点时捕获用户的当前光标,然后使用在运行时动态生成的附加MaskedTextBox直接屏蔽输入,显示在RichTextBox的顶部。因此,当输入的电子邮件地址不止一个时,可以有多个MaskedTextBox。

我不是说这是一件容易的事,但这是可行的。

见:

MSDN documentation on MaskedTextBox