【问题标题】:Set ToolStripMenuItem mnemonic programmatically以编程方式设置 ToolStripMenuItem 助记符
【发布时间】:2016-01-19 13:30:08
【问题描述】:

我正在根据机器上可用的 COM 端口将ToolStripMenuItems 添加到菜单中,以允许用户检查一个以供使用。

我想为每个菜单项添加一个助记符,这样结果就与我手动添加“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

编辑:我意识到我可能实际上并不想这样做,因为如果 COM 编号变为两位数(例如 COM&1 和 COM&10 将是相同的助记符),这将导致问题。但我仍然有兴趣了解如何 完成这项工作,以及为什么我的代码不起作用。

【问题讨论】:

  • 字符串是不可变的,所以不要忘记使用 Insert() 的返回值。 tsmi.Text = p.Insert(3, "&")
  • 您的关注是一件好事,但这在 MRU 列表中仍然很常见。他们所做的是在前 10 个项目中添加助记符(第 10 个获得 0 上的助记符),然后对 10 之后的项目没有助记符。由于前 10 个可能是最常用的,这仍然很有帮助。或者,重复助记符将起作用,每次按下键时焦点只会在重复项之间移动。它只是不会即时切换它们。
  • @HansPassant & @CodyGray 太好了,谢谢!汉斯,你想这样回答吗?

标签: vb.net mnemonics


【解决方案1】:

正如@HansPassant 所评论的,字符串是不可变的,因此Insert() 必须类似于共享函数一样使用。 也就是说,而不是:

p = tsmi.Name
p.Insert(3, "&")
tsmi.Text = p

我应该改用:

tsmi.Text = tsmi.Name.Insert(3, "&")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多