Я добавляю ToolStripMenuItem
s в меню, основанное на COM-портах, доступных на аппарате, чтобы позволить пользователю проверить его для использования.Set ToolStripMenuItem Мнемоника программно
Я хотел бы добавить мнемонику для каждого пункта меню, чтобы результат был таким же, как если бы я вручную добавил «COM & 6» в качестве значения свойства ToolStripMenuItem.Text.
Однако, используя PortName.Insert(3, "&")
, кажется, не имеет никакого эффекта, или, может быть, я неправильно настроил текст?
Как я могу это достичь? В настоящее время мой полный код для этого сегмента заключается в следующем:
For Each p As String In PortNames
Dim tsmi As ToolStripMenuItem = New ToolStripMenuItem()
tsmi.Name = p
p.Insert(3, "&") 'This appears to do nothing
tsmi.Text = p
tsmi.CheckOnClick = True
tsmi.Checked = False
AddHandler tsmi.Click, AddressOf Me.PortSelectionTooStripMenuItem_Click
CommunicationsToolStripMenuItem.DropDownItems.Add(tsmi)
Next
EDIT: я понял, что я, вероятно, не на самом деле хочу, чтобы сделать это, так как это вызовет проблемы, если COM номер перейти в двузначные (например, COM & 1 и COM & 10 будет такой же мнемонической). Но мне все равно было бы интересно узнать, как это было сделано и почему мой код не работал.
Строки неизменны, так что вы не должны забывать использовать возвращаемое значение Insert(). tsmi.Text = p.Insert (3, "&") –
Ваша забота хорошая, но это все еще обычно делается в списках MRU. То, что они делают, это добавить мнемонику к первым 10 элементам (10-й получает мнемонику на 0), а затем не имеет мнемоники для предметов за пределами 10. Так как первые 10, вероятно, наиболее часто используются, это по-прежнему полезно. Альтернативно, дублирующие мнемоники будут работать, фокус будет просто перемещаться между дубликатами при каждом нажатии клавиши. Он просто не запускает их. –
@HansPassant & @ CodyGray Отлично, спасибо! Тебе кажется, что это ответ Ганс? – Toby