Вам необходимо создать свой пользовательский элемент управления для этого требования.
Я создал похожий. размещение логики и кода - надеюсь, это поможет вам в получении основной идеи.
Вам необходимо создать два пользовательских элемента управления.
- Пользовательский элемент управления (контейнер для второго пользовательского элемента управления + текстовое поле, которое вы показываете нам в вопросе)
- Элемент управления тегами (будет содержать метку для отображения текста тега и метку ссылки «x» для его удаления)
Вместе это создаст визуализацию единого пользовательского элемента управления. где вы можете напечатать (с выпадающим предложением), и как только вы нажмете ',', он создаст тег и сохранит его внутри.
Это будет выглядеть ниже,

Вот код для этого.
Пользовательский элемент управления будет иметь следующие функции управления по умолчанию
private System.Windows.Forms.FlowLayoutPanel flayoutCustomControlContainer;
public System.Windows.Forms.TextBox textBox1; //Marking this public so it can be directly accessed by external code.
здесь flayoutCustomControlContainer
содержит textBox1
по умолчанию.
textBox1
будет иметь событие Key Up, как показано ниже.
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Oemcomma) //we will perform this on every ',' press
{
flayoutCustomControlContainer.Controls.Remove(textBox1);
TagControl tag = new TagControl(); //creating new Tag control
tag.lblTagName.Text = textBox1.Text.TrimEnd(",".ToCharArray());
tag.Remvoed += tag_Remvoed; //subscribing "Removed" event of Tag
tag.Width = tag.lblTagName.Width + 50;
tag.Height = tag.lblTagName.Height + 5;
flayoutCustomControlContainer.Controls.Add(tag);
textBox1.Text = "";
flayoutCustomControlContainer.Controls.Add(textBox1);
textBox1.Focus();
}
}
void tag_Remvoed(object sender, EventArgs e)
{
this.flayoutCustomControlContainer.Controls.Remove((Control)sender);
textBox1.Focus();
}
Конструктор Custom Control, как вы показали в вопросе,
public CustomControl()
{
InitializeComponent();
source.Add("Test");
source.Add("TestItem");
source.Add("TestValue");
this.textBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.textBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
this.textBox1.AutoCompleteCustomSource = source;
}
Теперь Tag Control.
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
public System.Windows.Forms.Label lblTagName;
private System.Windows.Forms.LinkLabel llblRemove;
метка ссылки, llblRemove будет иметь событие щелчка ссылки, которое вызовет событие, которое пользовательский элемент управления перечисляет.
private void llblRemove_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (Remvoed != null)
Remvoed(this, EventArgs.Empty);
}
Теперь используйте этот пользовательский элемент управления в любом месте.
Я загрузил рабочий пример проекта на GitHub.
Найти Ссылка