c#电子邮件地址组合框

本文关键字:组合 电子邮件地址 | 更新日期: 2023-09-27 18:02:35

我有一个包含邮件收件人地址的组合框。当它下拉时,用户会看到他发送邮件的所有地址的列表。我想要组合框附加地址在它的文本字段,而不是替换所有的文本在那里。

例如,我在combobox的列表中有一个邮件列表aaa@mail.com, bbb@mail.com, ccc@mail.com, aaa@mail.com在combobox. text中。当我选择bbb@mail.com从cbox的列表,我想组合框。Text变成了aaa@mail.com, bbb@mail.com,但是Text变成了bbb@mail.com。

<>之前这是组合框:+----------------+ +----------------+| aaa@mail.com |V| | aaa@mail.com |V|+----------------+ +----------------+| aaa@mail.com | | aaa@mail.com || bbb@mail.com |尝试选择这将带来| bbb@mail.com || ccc@mail.com |不需要的| ccc@mail.com |+----------------+ +----------------+当有人点击aaa@mail.com或bbb@mail.com或ccc@mail.com时,可编辑字段就变成了该值。例如,选择bbb@mail.com后,它将变成+----------------+| bbb@mail.com |V|+----------------+我希望组合框附加值,而不仅仅是选择它们。所以我想把它展示出来+------------------------------+| aaa@mail.com, bbb@mail.com |V|+------------------------------+而不是+----------------+| bbb@mail.com |V|+----------------+之前

我写了这段代码(它只是一个表单与组合框,按钮和按钮,窗体的FormClosed事件设置,按钮的点击事件设置和组合框的事件selectedIndexChanged和TextChanged设置),但它不工作,因为我的期望。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        cboxFrom.Tag = string.IsNullOrEmpty(Settings.Default.emailFrom) ? "" : Settings.Default.emailFrom;
        cboxFrom.Text = (string)cboxFrom.Tag;
        if (Settings.Default.emailFroms == null)
            Settings.Default.emailFroms = new System.Collections.Specialized.StringCollection();
        //cboxFrom.DataSource = Settings.Default.emailFroms;
        foreach (string s in Settings.Default.emailFroms)
        cboxFrom.Items.Add(s);
    }
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Settings.Default.Save();
    }
    private void cboxFrom_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            ComboBox cbox = (ComboBox)sender;
            string addr = (string)cbox.Items[cbox.SelectedIndex];
            if (addr != null && cbox.Tag != null && !(cbox.Tag as string).Contains(addr))
            {
                if (cbox.Text.Trim().Length == 0)
                    cbox.Text = addr;
                else
                    cbox.Text = cbox.Tag + ", " + addr;
                cbox.Tag = cbox.Text;
            }
            else
                cbox.Text = (string)cbox.Tag;
        }
        catch { }
    }
    private void cboxFrom_KeyPress(object sender, KeyPressEventArgs e)
    {
        ComboBox cbox = (ComboBox)sender;
        cbox.Tag = cbox.Text;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        string[] addrs = cboxFrom.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        foreach(string s in addrs)
        if(!Settings.Default.emailFroms.Contains(s.Trim()))
            Settings.Default.emailFroms.Add(s);
    }
}

c#电子邮件地址组合框

我有一个建议。

而不是附加您的组合框文本。为什么不添加一个文本框和另一个按钮,当单击将选择的电子邮件地址从组合框添加到文本框?附加文本框。Text属性将更简单,并且它还允许用户在将其添加到发送列表之前确保他选择了正确的电子邮件。

按照你的方式做,据我所知有很多电子邮件,向下滚动用户可能会做出错误的选择,然后它会自动添加到你的组合框。用户无法删除的文本