C# C电子邮件地址组合框

C# C电子邮件地址组合框,c#,winforms,combobox,C#,Winforms,Combobox,我有一个包含邮件收件人地址的组合框。当它被下拉时,用户会看到他曾经发送过邮件的所有地址的列表。我希望combobox在其文本字段中追加地址,而不是替换其中的所有文本 例如,我有一个电子邮件列表aaa@mail.com, bbb@mail.com, ccc@mail.com在组合框的列表和aaa@mail.com在combobox.Text中。当我选择bbb@mail.com从cbox的列表中,我想创建combobox.Textaaa@mail.com, bbb@mail.com但文字只是变得简单

我有一个包含邮件收件人地址的组合框。当它被下拉时,用户会看到他曾经发送过邮件的所有地址的列表。我希望combobox在其文本字段中追加地址,而不是替换其中的所有文本

例如,我有一个电子邮件列表aaa@mail.com, bbb@mail.com, ccc@mail.com在组合框的列表和aaa@mail.com在combobox.Text中。当我选择bbb@mail.com从cbox的列表中,我想创建combobox.Textaaa@mail.com, bbb@mail.com但文字只是变得简单bbb@mail.com.

This is the combobox: +----------------+ +----------------+ | aaa@mail.com |V| | aaa@mail.com |V| +----------------+ +----------------+ | aaa@mail.com | | aaa@mail.com | | bbb@mail.com | trying to select this brings | bbb@mail.com | | ccc@mail.com | which is not desired | ccc@mail.com | +----------------+ +----------------+ When someone clicks on aaa@mail.com or bbb@mail.com or ccc@mail.com the editable field becomes that value. For example, after selecting bbb@mail.com it will become +----------------+ | bbb@mail.com |V| +----------------+ I want combobox to append values and not just select them. So I want it to show +------------------------------+ | aaa@mail.com, bbb@mail.com |V| +------------------------------+ instead of just +----------------+ | bbb@mail.com |V| +----------------+
我这里有个建议

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


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

我不知道您想要实现什么,我想在combobox的可编辑字段中添加地址而不是替换地址,这似乎非常荒谬。有可能吗?为什么不将它们附加到另一个控件(如文本框)上,因为这会混淆将要发生的事情bb@mail.com,它将从列表中消失,或单击后再次追加。这不是combobox在任何情况下的使用方式。我发现截屏combobox比制作ASCII版本更容易。这有帮助吗?
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);
    }
}