C # адрес электронной почты combobox - PullRequest
0 голосов
/ 13 июля 2011

У меня есть поле со списком адресов получателей почты. Когда он выпадает, пользователь видит список всех адресов, которые он когда-либо отправлял. Я хочу, чтобы выпадающий список добавлял адрес в его текстовое поле вместо того, чтобы заменять весь текст там.

Так, например, у меня есть список адресов электронной почты aaa@mail.com, bbb@mail.com, ccc@mail.com в списке combobox, а aaa@mail.com в combobox.Text. Когда я выбираю bbb@mail.com из списка cbox, я хочу, чтобы combobox.Text стал "aaa@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|
+----------------+

Я написал этот код (это просто форма с выпадающим списком, кнопкой и кнопкой, установлено событие формы FormClosed, задано событие нажатия кнопки и установлены события combobox 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);
    }
}

1 Ответ

0 голосов
/ 13 июля 2011

У меня просто есть предложение здесь.

Вместо добавления текста в поле со списком. Почему бы вам не добавить текстовое поле, а другая кнопка при нажатии добавляет выбранный адрес электронной почты из поля со списком в текстовое поле? Добавление свойства textBox.Text было бы проще, и оно также позволяет пользователю убедиться, что он выбрал правильный адрес электронной почты, прежде чем добавить его в список отправки.

По-моему, существует много электронных писем, как я понимаю, и прокрутка вниз пользователей может сделать ошибочный выбор, а затем он автоматически добавляется в ваш comboBox.Text, из которого пользователь не может выйти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...