В C# приложении WinForms мне нужно создать ContextMenuStrip
с раскрывающимся списком и текстовым полем:
private System.Windows.Forms.ContextMenuStrip ct1;
private void button_Click(object sender, EventArgs e)
{
var header = new ToolStripMenuItem("Header");
header.Enabled = false;
var options = new ToolStripMenuItem("Options");
for (int i = 0; i < 5; i++)
{
var checkoption = new ToolStripMenuItem("Check Me " + i + "!");
checkoption.CheckOnClick = true;
options.DropDownItems.Add(checkoption);
}
var txt = new ToolStripTextBox();
txt.Text = "changeme";
options.DropDownItems.Add(txt);
options.DropDown.Closing += DropDown_Closing;
ct1.Items.Clear();
ct1.Items.Add(header);
ct1.Items.Add(options);
ct1.Show(this, button.Left, button.Top);
}
private void DropDown_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
e.Cancel = (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked);
}
Теперь e.Cancel
предотвратит закрытие раскрывающегося списка, если причина ItemClicked
, поэтому я могу выбрать больше элементов, не открывая меню снова:
Обратите внимание, что "changeme" - это ToolStripTextBox
!
Как только я сфокусируюсь (щелкните на нем), я могу редактировать текст внутри:
После окончания sh редактирования текстового поля, Я все еще могу изменить элементы флажка, но индикатор отсутствует :
Как вернуть индикатор фокусировки как показано на первом снимке?
Примечание: если я наведу указатель мыши на «Верхний колонтитул», раскрывающийся список закроется, а затем переместится обратно в «Параметры», снова откроется раскрывающийся список, а затем индикатор фокуса. снова хорошо:
Как это сделать, не закрывая и не открывая раскрывающийся список?
Я пытался Select()
для элемента options
, но это не помогло, ни Invalidate()
на ct1
.