Вам нужен контракт, чтобы различать пункты меню предложений и остальные пункты меню, затем при добавлении предложений сначала удалите существующие пункты предложений, а затем добавьте новые элементы.
Здесь в качестве примера я использую Tag
свойство ToolStripMenuItem
в качестве контракта, и все элементы строки меню, имеющие suggestion
в своем теге, рассматриваются как рекомендации:
public void Suggest(List<string> words, ContextMenuStrip menu)
{
string suggestion = "suggestion";
menu.Items.Cast<ToolStripItem>().Where(x => x.Tag == (object)suggestion)
.ToList().ForEach(x => menu.Items.Remove(x));
words.ToList().ForEach(x =>
{
var item = new ToolStripMenuItem(x);
item.Tag = suggestion;
item.Click += (s, e) => MessageBox.Show(x);
menu.Items.Insert(0, item);
});
}
И как употребление, для одного слова:
Suggest(new List<string> { "something", "something else" }, contextMenuStrip1);
Для другого слова:
Suggest(new List<string> { "another", "another one" }, contextMenuStrip1);