У меня есть поле со списком адресов получателей почты. Когда он выпадает, пользователь видит список всех адресов, которые он когда-либо отправлял. Я хочу, чтобы выпадающий список добавлял адрес в его текстовое поле вместо того, чтобы заменять весь текст там.
Так, например, у меня есть список адресов электронной почты 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);
}
}